JavaScript-Prototyp-Funktion überschreibt nicht die ursprüngliche

7

Ich habe Javascript gelernt, als ich auf das Konzept des Prototyps stieß. Es ist mir gelungen, der cat -Klasse neue Methoden hinzuzufügen, aber die ursprüngliche talk -Methode konnte nicht überschrieben werden.

%Vor%

Warum warnt dies den neuen Text nicht?

    
datasn.io 15.04.2009, 13:31
quelle

2 Antworten

16

'Funktionskatze' ist nur eine Funktion. Sein Prototyp ist ein leeres Objekt ({}). 'Neue Katze' kann aufgerufen werden, um den Namen eines Mitglieds hinzuzufügen und mit einem neuen Objekt zu sprechen. Unter diesem neuen Objekt befindet sich der Funktionsprototyp, der immer noch {} ist.

%Vor%

Wenn Sie nun in 'cat.prototype.talk' schreiben, fügen Sie dem zugrunde liegenden Objekt Elemente hinzu:

%Vor%

Die Funktion 'talk', die direkt auf die Instanz 'c' gesetzt wird, hat Vorrang vor der 'Diskussion', die indirekt auf dem Konstruktorprototyp von c gesetzt wird.

Sie haben also hier zwei Arten der Vererbung durcheinander gebracht, die "this-associting" -Methode und die "prototype" -Methode.

Das Schreiben von Methoden in Prototypen hat den Vorteil, dass Sie nicht redundante Kopien derselben Elemente in jede Objektinstanz kopieren; Das Schreiben in Instanzen hat den Vorteil, dass das Problem der gebundenen Methoden gelöst wird. Welches du wählst, liegt ganz bei dir, aber mische die beiden nicht. Wenn Sie die Prototyp-Route verwenden möchten, sollte nur 'name' in 'this' geschrieben werden, da dies die einzige Eigenschaft ist, die für jede Instanz spezifisch ist.

    
bobince 15.04.2009, 13:59
quelle
7

Die am Anfang angehängte Funktion wird an das Objekt angehängt (1 Funktion für jede Instanz). der andere ist an den Prototyp gebunden (1 Funktion, die von allen Instanzen geteilt wird).

-Member auf der Objektebene überschreiben diese auf der Prototypebene.

    
MahdeTo 15.04.2009 13:49
quelle

Tags und Links