Überschreibendes Vererbungsmodell: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent()
Bei der JavaScript-Vererbung wird die Die Beziehung zwischen untergeordneten und übergeordneten Objekten wird durch Prototypenverkettung hergestellt. Normalerweise definieren Entwickler die Vererbung mit Child.prototype = new Parent(). Es gibt jedoch auch einen alternativen Ansatz, Child.prototype = Parent.Prototype. Dieser Artikel untersucht die Unterschiede zwischen den beiden und liefert eine Erklärung für eine offensichtliche Diskrepanz, die bei der Verwendung der letzteren auftritt.
Unterschied in der Ausführung
Child.prototype = new Parent () erstellt ein neues Objekt als Prototyp für die untergeordnete Klasse (Child) und setzt seinen Prototyp auf die übergeordnete Klasse (Parent). Dieses neu erstellte Objekt erbt alle Eigenschaften und Methoden vom übergeordneten Objekt.
Andererseits erstellt Child.prototype = Parent.Prototype kein neues Objekt. Stattdessen verweist es einfach auf den Prototyp der übergeordneten Klasse. Dies bedeutet, dass untergeordnete und übergeordnete Klassen dasselbe Prototypobjekt verwenden und alle an einem vorgenommenen Änderungen Auswirkungen auf das andere haben.
Diskrepanz in der .proto-Eigenschaft
Im bereitgestellten Beispiel , entsteht die Diskrepanz, weil die this.hitBox-Zeilen versuchen, Eigenschaften zu diesem Objekt hinzuzufügen, bei dem es sich im Fall von Spaceship um den neu erstellten Prototyp handelt. Wenn der Prototyp (this.hitBox) jedoch später GameObject.prototype zugewiesen wird, wird der Prototyp von GameObject überschrieben und die Eigenschaften, die dem Prototyp von Spaceship hinzugefügt wurden, gehen verloren. Dies erklärt, warum die this.proto-Eigenschaft in Spaceship auf Spaceship statt auf GameObject gesetzt ist.
Empfohlene Vererbungsmethode
Damit die Vererbung ordnungsgemäß funktioniert, wird empfohlen, Child zu verwenden .prototype = new Parent() statt Child.prototype = Parent.Prototype. Der erstere Ansatz erstellt ein separates Prototypobjekt für die untergeordnete Klasse, während der letztere zu unerwartetem Vererbungsverhalten führen kann.
Um das Problem im bereitgestellten Beispiel zu entschärfen, kann man Object.create(GameObject.prototype) verwenden, um Erstellen Sie ein neues Objekt als Prototyp für das Raumschiff. Dieses Objekt verfügt über dieselben Eigenschaften und Methoden wie der Prototyp von GameObject, wird jedoch nicht überschrieben, wenn der Prototyp von GameObject geändert wird.
Das obige ist der detaillierte Inhalt vonChild.prototype = Parent.Prototype vs. Child.prototype = new Parent(): Warum bei der JavaScript-Vererbung das eine dem anderen vorziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!