44 votes

Quelle est la différence entre définir une fonction par un prototype et une propriété de classe?

Suivez mon code,
Apple est défini fonction par prototype.
Banana est une propriété de définition de fonction par classe.

 var Apple = function(){}
Apple.prototype.say = function(){
    console.debug('HelloWorld');
}
var Banana = function(){
    this.say = function(){
        console.debug('HelloWorld');
    }
}

var a = new Apple();
var b = new Banana();

a.say();
b.say();
 

Sont ces différences?

66voto

Tim Rogers Points 9956

Lorsque vous créez plus d'une instance d'Apple, vous devrez encore vous n'avez qu'un seul exemple d' say() dans la mémoire. Toutefois, lorsque vous créez plus d'un exemple de la Banane, vous finirez par créer beaucoup de cas de l' say() fonction.

C'est pourquoi prototypes économiser de la mémoire. Vous pouvez également éviter le coût de traitement de la création et l'attribution de l' say() fonction.

Aussi, si vous modifiez le parent propriétés de l'objet, si l'enfant ne remplace pas que des biens, des changements sont visibles de l'enfant.

2voto

Falaque Points 485

Les membres prototypes sont comme les membres de la classe. Les membres prototypes sont comme les membres de la classe, mais lorsque vous le définissez autrement, ce n'est pas un membre de la classe. Donc, si vous créez beaucoup d'objets d'Apple, tous partageront la même fonction, alors que dans le cas d'une banane, chaque objet aura sa propre copie de fonction. Pensez au prototype en javascript comme statique en C #.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X