2013-10-19 16 views
5

Durante il corso javascript su codecademy.com, sono diventato un po 'confuso.Qualcuno può dirmi la differenza? javascript oop

Quindi, prima siamo stati learnring come aggiungere un metodo per classe:

function Dog (breed) { 
    this.breed = breed; 
    this.sayHello = function() { 
     console.log("Hello this is a " + this.breed + " dog"); 
    } 
}; 
var someDog = new Dog("golden retriever"); 
someDog.sayHello(); 

poi abbiamo iniziato il "prototipo". E c'era questo esempio:

function Dog (breed) { 
    this.breed = breed; 
}; 
Dog.prototype.sayHello = function() { 
    console.log("Hello this is a " + this.breed + " dog"); 
} 
var someDog = new Dog("golden retriever"); 
someDog.sayHello(); 

Entrambi gli esempi stanno dando lo stesso risultato. Questi due esempi sono solo due modi per fare la stessa cosa? O c'è una differenza pratica tra due di loro?

risposta

7

La differenza è che nel secondo caso, tutte le istanze condividono la stessa funzione sayHello. È più efficiente, specialmente se crei molte istanze.

+3

Buona pesca!!!!! +1 –

2

Il prototipo metodo sayHello è condiviso da tutte le istanze della classe Dog in contrasto con l'aggiunta con questo nel costruttore che crea una nuova copia per ogni istanza, sprecando spazio e tempo.

Ecco come i nuove opere operatore a parole:

https://gist.github.com/Havvy/5037770

Ecco come il nuovo operatore funziona utilizzando una foto:

enter image description here

Problemi correlati