Vererbung und die Konstruktoreigenschaft in JavaScript verstehen
Der bereitgestellte Codeausschnitt demonstriert die Vererbung in JavaScript. Es wirft jedoch auch Fragen zur Konstruktoreigenschaft und zum Instanzoperator auf.
Warum wird die Konstruktoreigenschaft für b und c nicht aktualisiert?
Bei der Einstellung von b.prototype auf neues a(), das Prototypobjekt von a wird zum Prototyp von b. Dadurch wird die Konstruktoreigenschaft von b nicht aktualisiert, die weiterhin die Funktion b bleibt. Ebenso erbt c von b und erbt somit auch den Konstruktor von b, der letztlich auf a zeigt.
Ist der Vererbungsmechanismus fehlerhaft?
Nein, der Vererbungsmechanismus ist korrekt . In JavaScript ist die Konstruktoreigenschaft eine Eigenschaft des Prototypobjekts, nicht der Instanz selbst. Beim Erstellen einer Instanz verweist die interne [[proto]]-Eigenschaft auf den Prototyp des Konstruktors, nicht auf die Konstruktorfunktion selbst.
Aktualisieren der Konstruktoreigenschaft
Zu Wenn Sie die Konstruktor-Eigenschaft aktualisieren, können Sie das folgende Muster verwenden:
function Square(side) { if (this instanceof Square) { this.side = side; } else { return new Square(side); } }
Understanding Instanz von
Der Instanzenoperator ist nicht auf die Konstruktoreigenschaft der Instanz angewiesen. Stattdessen wird geprüft, ob die Prototypenkette des Instanzobjekts den Prototyp der Konstruktorfunktion enthält. Im angegebenen Code:
c.prototype = new b(); console.log(new c() instanceof c); // true
Auch wenn die Konstruktoreigenschaft von (new c()) auf a() zeigt, prüft „instanceof“ die Prototypenkette und identifiziert sie korrekt als Instanz von c aufgrund der Prototypenkette Enthält c.prototype.
Fazit
Vererbung in JavaScript beinhaltet das Festlegen des Prototyps des abgeleiteten Konstruktors zu einer Instanz des Basiskonstruktors. Die Eigenschaft „Konstruktor“ bleibt eine Eigenschaft des Prototypobjekts und der Operator „instanceof“ überprüft die Prototypenkette, um festzustellen, ob eine Instanz zu einem bestimmten Konstruktor gehört.
Das obige ist der detaillierte Inhalt vonWarum aktualisiert der Vererbungsmechanismus von JavaScript die Konstruktoreigenschaft nicht automatisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!