Das liegt daran, dass die spezifische Funktion, die Sie im Konstruktor definieren, diejenige außer Kraft setzt, die durch den Prototyp geerbt wird.
Von EcmaScript-Spezifikation :
Jedes von einem Konstruktor erstellte Objekt hat eine implizite Referenz (der Prototyp des Objekts genannt) auf den Wert des Konstruktors "Prototyp" -Eigenschaft. Außerdem kann ein Prototyp eine Nicht-Null haben impliziter Verweis auf seinen Prototyp und so weiter; das nennt man das Prototyp-Kette. Wenn auf eine Eigenschaft in einem Objekt Bezug genommen wird, Diese Referenz bezieht sich auf die Eigenschaft dieses Namens im ersten Objekt in die Prototypkette, die eine Eigenschaft dieses Namens enthält. In anderen Zuerst wird das direkt genannte Objekt auf solche untersucht Eigentum; Wenn dieses Objekt die benannte Eigenschaft enthält, ist dies die Eigenschaft, auf die sich die Referenz bezieht; wenn dieses Objekt nicht enthält die benannte Eigenschaft, wird der Prototyp für dieses Objekt untersucht Nächster; und so weiter.
Kurz gesagt: Wenn Sie nach einer Funktion (oder nach einer Eigenschaft mit ihrem Namen) suchen, beginnen Sie am Objekt und gehen dann in der Prototypkette nach oben.
Sie überschreiben Ihre prototype.show
-Methode in p
-Funktion.
In Javascript, wenn eine Eigenschaft aufgelöst wird, betrachtet die Engine zuerst die Eigenschaften eines Objekts. In Ihrem Beispiel würde das Objekt durch this
repräsentiert. Wenn es die Eigenschaft findet, in diesem Fall show
(Remember-Funktionen können Eigenschaften sein), verwendet es diese Eigenschaft. Wenn die Eigenschaft nicht gefunden wird, durchläuft sie die Prototypkette, um die Eigenschaft aufzulösen.
Tags und Links javascript inheritance prototype