Heim > Web-Frontend > js-Tutorial > Warum aktualisiert der Vererbungsmechanismus von JavaScript die Konstruktoreigenschaft nicht automatisch?

Warum aktualisiert der Vererbungsmechanismus von JavaScript die Konstruktoreigenschaft nicht automatisch?

DDD
Freigeben: 2024-12-04 15:07:11
Original
224 Leute haben es durchsucht

Why Doesn't JavaScript's Inheritance Mechanism Automatically Update the Constructor Property?

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);
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage