Warum wird die im Prototyp deklarierte Funktion nicht aufgerufen?

8
%Vor%

Es warnt "hello world!!!" , warum?

Kann ich die Prototyp-Methode ändern, wenn ja wie?

    
smilexu 05.12.2012, 08:18
quelle

3 Antworten

7

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.

    
Denys Séguret 05.12.2012, 08:21
quelle
3

Sie überschreiben Ihre prototype.show -Methode in p -Funktion.

    
Boris Pavlovic 05.12.2012 08:20
quelle
1

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.

    
Kevin Bowersox 05.12.2012 08:24
quelle