Artigo completo : http://veerasundar.com/blog/2014/02/javascript-prototype-methods-vs-object-methods/
Quando você anexa métodos a instâncias de objeto, cada instância terá sua própria cópia do método. Isso envolve o tempo de processamento do sistema e a memória.
Mas, quando você anexa o método ao do objeto prototype
, então existe apenas uma versão do método. Isso não precisa de tanto tempo de processamento e memória quando comparado à abordagem acima.
Vamos ver isso com um exemplo.
var Parent = function(){
this.yellAtKid = function(){
console.log('Somebody gonna get a hurt real bad!');
};
};
console.profile('Object Methods');
var dads = [];
for(var i=0; i<=10000000; i++){
dads.push(new Parent());
}
console.profileEnd(); // 4903.267ms
Quando criei o perfil do código acima no Firefox / Mac, o método populate () levou cerca de 4903.267 ms para ser executado. Se eu mudar o anexo do método para protótipo, como abaixo:
var Parent = function(){
};
Parent.prototype.yellAtKid = function(){
console.log('Somebody gonna get a hurt real bad!');
};
console.profile('Prototype Methods');
var dads = [];
for(var i=0; i<=10000000; i++){
dads.push(new Parent());
}
console.profileEnd(); // 3271.413ms
Desta vez, o populate()
método levou apenas 3.271,413 ms segundos. Assim, economizamos cerca de 1,5 segundo , apenas reconectando os métodos a prototype
.