'fonction cat' est juste une fonction. Son prototype est un objet vide ({}). 'New cat' peut être appelé pour ajouter le nom des membres 'et' talk 'à un nouvel objet. Sous ce nouvel objet sera le prototype de la fonction, qui est toujours {}.
var c= new cat('Tiddles');
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: {}
Maintenant, quand vous écrivez « cat.prototype.talk », vous ajoutez des membres à cet objet sous-jacent:
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: { 'talk': function() {...} }
Le « talk » fonction situé directement sur l'instance « c » prend préséance sur l'ensemble 'talk' indirectement sur le prototype du constructeur de c. Donc, vous avez mélangé deux styles d'héritage ici, la méthode d'affectation 'this' et la méthode 'prototype'.
L'écriture de méthodes sur des prototypes présente l'avantage de ne pas obtenir de copies redondantes des mêmes membres copiés dans chaque instance d'objet; écrire aux instances a l'avantage de résoudre le problème des méthodes liées. Lequel vous choisissez est à vous, mais ne mélangez pas les deux. Si vous souhaitez utiliser la route prototype, seul 'name' doit être écrit dans 'this', car c'est la seule propriété spécifique à chaque instance.