Warum verwendet Babel setPrototypeOf für die Vererbung, wenn Object.create (superClass.prototype) bereits vorhanden ist?
Geben Sie den folgenden Code in das @ eBabel REPL
class Test {
}
class Test2 extends Test {
}
Du bekommst dasinherits
function
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;
}
Es sah gut für mich aus, bis ich merkte, dass es beides tatObject.create
auf dem Prototypun a setPrototypeOf
Anruf. Ich war nicht so vertraut mitsetPrototypeOf
so ging ich zum MDN wo steht
Wenn Sie Wert auf Leistung legen, sollten Sie es vermeiden, den [[Prototyp]] eines Objekts festzulegen. Erstellen Sie stattdessen mit Object.create () ein neues Objekt mit dem gewünschten [[Prototype]].
Was verwirrt mich, da sie beide benutzen. Warum ist das so?
Sollte die Zeile stattdessen @ se
if (superClass && !superClass.prototype)
für den Fall, dass der Prototyp nicht gesetzt ist, aber immer noch ein @ h__proto__
?