Heim > Web-Frontend > js-Tutorial > Warum wird die Konstruktor-Eigenschaft von JavaScript bei der prototypischen Vererbung nicht aktualisiert?

Warum wird die Konstruktor-Eigenschaft von JavaScript bei der prototypischen Vererbung nicht aktualisiert?

DDD
Freigeben: 2024-12-06 18:34:12
Original
586 Leute haben es durchsucht

Why Doesn't JavaScript's Constructor Property Update in Prototypal Inheritance?

Verstehen der JavaScript-Vererbung und der Konstruktoreigenschaft

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

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

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

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!

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