Possibile che mi sono dimenticato tutto?
Creiamo un oggetto in JavaScript, ossia una classe.
function Oggetto(){ this.prop; } var Istanza=new Oggetto(); Istanza.prop="uno"; alert(Istanza.prop);Ottengo una Alert con "uno".
L'istanza ha modificato la sua proprietà prop quando è già stata istanziata.
Ora creo due istanze di Oggetto, e modifico le proprietà delle istanze, quando già sono state istanziate.
function Oggetto(){ this.prop; } var Istanza=new Oggetto(); Istanza.prop="uno"; var Istanza2=new Oggetto(); Istanza2.prop="due"; alert(Istanza.prop); alert(Istanza2.prop);Ottengo ovviamente due Alert rispettivamente con "uno" e "due", che sono i valori della proprietà prop nelle singole istanze.
Ora modifico la proprietà prop direttamente nel prototipo:
function Oggetto(){ this.prop; } Oggetto.prototype.prop="cicciobello"; var Istanza=new Oggetto(); var Istanza2=new Oggetto(); alert(Istanza.prop); alert(Istanza2.prop);Ottengo per ambedue le istanze la proprietà impostata al valore "cicciobello", in quanto ho agito sul prototipo.
Ora prima istanzio Istanza, e ne modifico la proprietà, quindi la modifico nel prototipo in modo diverso e vediamo se anche nell'Istanza si modifica allo stesso modo.
function Oggetto(){ this.prop; } var Istanza=new Oggetto(); Istanza.prop="io sono la proprieta dell'istanza" alert(Istanza.prop); Oggetto.prototype.prop="io sono la proprieta del prototipo"; alert(Istanza.prop);No, non c'è nessuna modifica. Una volta che nell'istanza è stato dato un valore, questo non cambia se si modifica nel prototipo.
Provo invece a istanziare Istanza2 dopo la modifica del prototipo.
function Oggetto(){ this.prop; } var Istanza=new Oggetto(); Istanza.prop="io sono la proprieta dell'istanza" alert(Istanza.prop); Oggetto.prototype.prop="io sono la proprieta del prototipo"; var Istanza2=new Oggetto(); alert(Istanza.prop); alert(Istanza2.prop);La proprietà di Istanza non cambia, mentre quella di Istanza2, che è stata istanziata dopo che nel prototipo si è avuta la modifica, cambia.
Adesso aggiungo una nuova proprietà nel prototipo e vediamo se appare anche nell'Istanza, che è stata istanziata prima di questa modifica:
function Oggetto(){ this.prop; } var Istanza=new Oggetto(); Oggetto.prototype.nuovaProp="Io sono una nuova proprieta"; var Istanza2=new Oggetto(); alert(Istanza.nuovaProp); alert(Istanza2.nuovaProp);Sì: l'aggiunta di una nuova proprietà nel prototipo aggiunge la nuova proprietà anche nell'Istanza istanziata prima di questa aggiunta.