Heim >Web-Frontend >js-Tutorial >Warum wird die Konstruktor-Eigenschaft von JavaScript bei der prototypischen Vererbung nicht aktualisiert?
In JavaScript wird die Vererbung durch prototypische Vererbung erreicht, wobei Objekte über ihre Prototypenkette Eigenschaften und Methoden von anderen Objekten erben. Die Konstruktor-Eigenschaft spielt in diesem Mechanismus eine entscheidende Rolle.
Vererbung und die Konstruktor-Eigenschaft
Bedenken Sie den folgenden Code:
function a() {} function b() {} function c() {} b.prototype = new a(); c.prototype = new b(); console.log((new a()).constructor); //a() console.log((new b()).constructor); //a() console.log((new c()).constructor); //a()
Warum ist das nicht der Fall? Ist der Konstruktor für B und C nicht aktualisiert? Dies liegt daran, dass in JavaScript die Konstruktoreigenschaft nicht direkt der Instanz zugewiesen wird; Stattdessen befindet es sich auf dem Prototypobjekt. Es speichert einen Verweis auf die Konstruktorfunktion, die das Objekt erstellt hat. Im obigen Beispiel ist der Prototyp von b und c auf eine Instanz von a festgelegt, weshalb der Konstruktor für alle drei Instanzen als a() gemeldet wird.
Best Practices für die Aktualisierung des Konstruktors
Um die Konstruktoreigenschaft für geerbte Klassen zu aktualisieren, besteht ein gängiger Ansatz in der Verwendung eines Zwischenprodukts Funktion:
function base() {} function derive() { derive.superclass = base.prototype; derive.prototype = new derive.superclass(); derive.prototype.constructor = derive; }
Diese Technik stellt sicher, dass die Konstruktoreigenschaft von Ableitungsinstanzen korrekt auf die Ableitungsfunktion eingestellt ist.
Instanceof und die Prototypkette
Während der (new c()).constructor gleich a() ist, ist es für Instanzen dennoch möglich, new c() korrekt als Instanz von c zu identifizieren. Dies liegt daran, dass „instanceof“ die Prototypenkette des Instanzobjekts überprüft. In diesem Fall führt die Prototypenkette für new c() zurück zum c-Prototyp.
console.log(new a() instanceof a); //true console.log(new b() instanceof b); //true console.log(new c() instanceof c); //true
Fazit
JavaScripts Vererbung und die Interaktionen der Konstruktoreigenschaften können sein komplex, aber ihr Verständnis ist für eine effektive objektorientierte Programmierung in JavaScript von entscheidender Bedeutung. Wenn Sie die in diesem Artikel beschriebenen Konzepte verstehen, können Sie robusten und wiederverwendbaren Code schreiben, der die Vererbung und die Prototypenkette effektiv nutzt.
Das obige ist der detaillierte Inhalt vonWarum wird die Konstruktor-Eigenschaft von JavaScript bei der prototypischen Vererbung nicht aktualisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!