2016-10-07 4 views
2

In der Mitte des Mozilla documentation page es (ohne klar genug Erklärung) schaltet Beispiele ausWarum wird new Parent() oft verwendet, um Prototypen von Kindern anstelle von Object.create (Parent.prototype) zu initialisieren?

WorkerBee.prototype = Object.create(Employee.prototype); 

zu

WorkerBee.prototype = new Employee; 

Zweiter Form new Employee werden Prototyp WorkBee mit Eigenschaften initialisieren, die in Instanzen sollen nur existieren von WorkBee.

Warum wird das zweite Formular in so vielen Beispielen der JavaScript-Vererbung verwendet? Ist es nicht unerwünscht, vererbten Eigenschaften gegenüber eigenen Eigenschaften einen anderen Status zuzuweisen?

Der Status des Namens der Employee-Eigenschaft in WorkBee unterscheidet sich von den Eigenschaftsprojekten, da der Name in WorkBee.prototype.name definiert ist, während die Projekte in der WorkBee-Instanz definiert sind.

Im Allgemeinen, warum sollte jemand jemals Konstruktor der nicht abstrakten Klasse X verwenden, um Prototyp der abgeleiteten Klasse Y in JavaScript zu initialisieren?

Meiner Meinung nach sollten beide Konstruktoren nur verwendet werden, um Instanzen von X und Y zu initialisieren, und wenn Y von X abgeleitet wird, sollte Konstruktor X Instanzen von Y initialisieren, nicht Prototyp von Y. Aber wenn X abstrakt ist, was bedeutet, dass wir keine Instanzen von X erwarten, nur dann können wir X-Konstruktor als einen Platz verwenden, um die Initialisierung von Prototypen abgeleiteter Klassen zu platzieren.

+1

Der verlinkte Artikel tatsächlich [hat mehr Probleme] (https://bugzilla.mozilla.org/show_bug.cgi?id=1201380#c9) als nur das – Bergi

+0

Dieser Artikel sagt "Es ist 2015: das sollte nicht Teil sein MDN. ", Kann ich nur hinzufügen Es ist Oktober 2016: das sollte nicht Teil von MDN sein. – alpav

+1

Es ist ein Wiki - bitte helfen :-) – Bergi

Antwort

1

Warum wird das zweite Formular in so vielen Beispielen für JavaScript-Vererbung verwendet?

Weil wir es nicht losgeworden sind, und es breitet sich weiter aus. Siehe auch here für etwas Geschichte.

Ist es nicht unerwünscht, vererbten Eigenschaften einen anderen Status zuzuweisen als eigene Eigenschaften?

Ja, absolut.

Verwandte Themen