Anexar funções JavaScript para protótipo vs instâncias de objeto

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.