mercoledì 30 aprile 2014

Ripasso di JavaScript

Ripassiamoci un po' di JavaScript...

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.

Nessun commento:

Posta un commento