'Funktion Katze' 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.
var c= new cat('Tiddles');
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: {}
Nun, wenn Sie auf ‚cat.prototype.talk‘ schreiben, Sie sind Mitglieder in diesem zugrunde liegenden Objekt hinzufügen:
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: { 'talk': function() {...} }
Die ‚sprechen‘ Funktion direkt auf der Instanz ‚c‘ gesetzt nimmt Vorrang vor dem "Gespräch", das indirekt über den Konstruktorprototyp von c gesetzt wird.
Sie haben also hier zwei Arten der Vererbung, die 'this-Zuweisungsmethode' und die 'Prototyp'-Methode, durcheinandergebracht.
Das Schreiben von Methoden in Prototypen hat den Vorteil, dass keine redundanten Kopien derselben Elemente in jede Objektinstanz kopiert werden. 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.