Kurzer Hintergrund: In JavaScript hat die Konstruktorfunktion für jeden Objekttyp eine prototypeEigenschaft. Das prototypebezieht sich auf ein Objekt, das jedes konstruierte Objekt als nächsten Schritt in seiner Prototypenkette verwendet. Wenn ein Typ einem anderen Typ inhärent sein soll, können Sie prototypeden untergeordneten Typ auf eine neue Instanz des übergeordneten Typs setzen.
Zum Beispiel:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
Meine Frage fragt, welcher Code an der Stelle " Some prototype object goes here" im obigen Code stehen soll. Mein erster Instinkt ist, eine Instanz des übergeordneten Elements (dh new Parent()) zu erstellen, aber in einem Kommentar zu einer Antwort auf Ist dies eine sichere Möglichkeit, einen Objektprototyp auf einen anderen zu kopieren? schreibt ein Benutzer:
Nein, nicht
new bar()für das Prototypobjekt verwenden!
(... das ist eine Meinung, die ich in vielen SO-Antworten und Kommentaren gesehen habe, aber dies ist das einzige Beispiel, das ich derzeit zur Hand habe.)
Die andere Option ist die Verwendung Object.create(Parent.prototype)als Child.prototype. Soweit ich weiß, wird dadurch auch eine neue ParentInstanz erstellt, der ParentKonstruktor wird jedoch nicht ausgeführt .
Kann jemand erklären, warum das Ausführen der Konstruktorfunktion vermieden werden sollte, wenn ein Prototypobjekt aus einem übergeordneten Typ generiert wird? Gibt es ein erhebliches technisches Problem (möglicherweise bei mehreren Vererbungsebenen)? Oder ist ein solches Muster ein Missbrauch von Konstruktoren, der mit einigen prototypischen Best Practices kollidiert (z. B. wenn das Ausführen des Konstruktors beim Erstellen eines Prototyps gegen eine gewisse Trennung von Bedenken verstößt)?
Object.createwird es umgesetzt.