In JavaScript können wir Prototypen verwenden, um die Vererbung zu erreichen.
Zum Beispiel
Funktion BAZ () {this.oo = "";} Funktion foo () {} foo.prototype = new baz (); var myfoo = new foo (); myfoo.oo;Auf diese Weise können wir auf das Attribut OO in Baz zugreifen. Dies ist im tatsächlichen Gebrauch aufgrund der Freigabeeigenschaften des Prototyps nicht möglich (Daten werden auf dem Haufen gespeichert).
Alle Instanzen verwenden einen Prototyp, aber sobald das BAZ -Attribut einen Referenztyp hat, ist es tragisch. Wenn eine Instanz geändert wird, ändert sich auch die andere Instanz ... wuwuwu
Es wird natürlich eine Kombinationserbranz geben
Funktion Baz () {this.oo = "";} baz.prototype.xx = function () {} Funktion foo () {baz.call (this); // Der zweite Anruf} foo.Prototype = new baz (); // Der erste Anruf var myfoo = new foo ();Dies wird ein Problem haben, und der Code zeigt auch, dass BAZ zweimal aufgerufen wird. Wie kann Jungfrau es zulassen?
Wenn Sie einen Satz hinzufügen, muss die zweite Methode das Problem mit der ersten Methode nicht haben? Die Antwort ist nein.
Der Grund ist, dass die Suche nach Attributen mit dem Objekt selbst beginnt. Nur wenn es nicht gefunden wird, wird es im Prototyp gefunden. Beim Anruf werden die Attribute geerbt.
Lassen Sie mich einen weiteren Satz hinzufügen, dann reicht es nicht aus, nur ein Call -Erbschaft wie dieses zu verwenden? Dies ist machbar, wenn Sie keinen Prototyp verwenden, aber wie können Sie keinen Prototyp als Jungfrau verwenden?
Die Methode wird am Prototyp geteilt, sodass die Leistung viel besser ist.
Parasitäre Kombinationserbranz
__extends = function (p, c) {function ctor () {this.constructor = c; // Zuweisungskonstruktor} ctor.Prototype = prototyp; foo () {baz.call (this);} var myfoo = new foo (); myfoo.oo; myfoo.xx;Dies löst nicht nur das Problem von zwei Aufrufen, sondern löst auch das Problem, dass, wenn das Objekt den Konstruktor aufruft, die reale Funktion, die das Objekt erstellt, anstelle anderer Konstruktoren in der Prototypkette aufgerufen wird.
Es gibt eine Anweisung im Code.
Der Konstruktor ist ein Attribut für das Prototypobjekt und der Ersteller des Objekts. Da unsere Prototypattribute neu zugewiesen werden, wird der Konstruktor vererbt.
Hier möchte ich darüber sprechen, wie Objekte erstellt werden, das heißt, was Neues getan hat.
Zum Beispiel:
var a = neu b ();
Eigentlich ist es so, a = {}; erstellt a für a und dann b.call (a); Rufen Sie initialisiert a. Es gibt einen weiteren Schritt vor dem Anruf, der das interne Prototyp -Objekt von a ist.
Das Prototypobjekt, auf das die Prototyp -Eigenschaft auf B Punkte eingestellt ist. Auf dem Prototyp befindet sich ein Konstruktorattribut, mit dem Objektzuweisungsspeichersteuerung erstellt wird.
Es ist wahrscheinlich alles ... Es ist noch spät, lass uns es brechen. Behalte einen ruhigen Geist und sei nicht ungeduldig. Arbeiten Sie hart, um sich morgen zu ändern, und hoffe, dass alles nach und nach besser wird.
Das obige Inhalt, den der Editor Ihnen über ein umfassendes Verständnis der Erbschaft (Must-Read) in JavaScript bringt. Ich hoffe, jeder wird mehr als das Haus zu Hause unterstützen.