Por que Babel usa setPrototypeOf como herança quando já faz Object.create (superClass.prototype)?
A publicação do código a seguir noBabel REPL
class Test {
}
class Test2 extends Test {
}
você entende issoinherits
função
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}
Pareceu-me bem até que percebi que estava fazendo as duas coisasObject.create
no protótipoe a setPrototypeOf
ligar. Eu não estava tão familiarizado comsetPrototypeOf
então eu fui aoMDN onde diz:
Se você se preocupa com o desempenho, evite definir o [[Protótipo]] de um objeto. Em vez disso, crie um novo objeto com o [[Prototype]] desejado usando Object.create ().
O que é confuso para mim, pois eles usam os dois. Por que esse é o caso?
Em vez disso, a linha deve ser
if (superClass && !superClass.prototype)
para quando o protótipo não estiver definido, mas ele ainda tiver um__proto__
?