den folgenden Code in die Sie inherits
FunktionWarum verwendet Babel setProtoTypeOf für die Vererbung, wenn es bereits Object.create (superClass.prototype) verwendet?
class Test {
}
class Test2 extends Test {
}
Veröffentlichung
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, bis ich es tat sowohl Object.create
auf dem Prototyp und ein setPrototypeOf
Anruf realisiert . Ich war nicht so vertraut mit setProtoTypeOf
so dass ich auf die MDN ging, wo es heißt:
Wenn Sie über die Leistung kümmern sollten Sie die [[Prototyp]] eines Objekts Einstellung vermeiden. Erstellen Sie stattdessen mit Object.create() ein neues Objekt mit dem gewünschten [[Prototyp]].
Das ist verwirrend für mich, da sie beide verwenden. Warum ist das der Fall?
Sollte stattdessen die Linie
if (superClass && !superClass.prototype)
für sein, wenn der Prototyp nicht gesetzt ist, aber es hat noch einen __proto__
?
Hmmm das ist ein bisschen verwirrend für mich. Könnten Sie ein Codebeispiel für die Unzulänglichkeiten von 'Object.create()' erstellen? Von dem, was ich in [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) gelesen habe, erbt es statische Methoden, da es sich nur um Methoden handelt, die definiert sind der Prototyp der ursprünglichen Klasse richtig? – m0meni
@ AR7: Statische Methoden sind im Konstruktorfunktionsobjekt der Klasse definiert, nicht im '.prototype' Objekt. Wir sprechen hier über die Erbauer, die sich gegenseitig erben, nicht die Prototypkette von Instanzen. – Bergi
Oh, mit statisch meintest du [this] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static). Mit 'Object.create' können Sie also die Prototypmethoden erben, aber nicht Methoden, die mit dem Schlüsselwort' static' definiert wurden, richtig? Obwohl ich neugierig bin ... warum sind statische Methoden auf dem '__proto__' Objekt anstatt des Prototyps gespeichert? – m0meni