giovedì 1 maggio 2014

Ulteriori sviluppi delle mie comprensioni del prototipo in JavaScript

In realtà, credo che se una variabile non viene inizializzata nel costruttore, di fatto non esiste.
Perché dunque non ottengo un messaggio di errore quando la mostro nell'Istanza?
Forse è semplicemente perché di fatto la aggiungo nell'istanza, non esistendo essa nel costruttore in quanto non inizializzata.
Forse questa "filosofia" è più aderente alla realtà.
function Oggetto(){
 this.prop;
}
var Istanza = new Oggetto();
alert(Istanza.prop);
Istanza.prop="Proprieta";
alert(Istanza.prop);
Ecco, in questo caso la proprietà non esiste nel costruttore, e la sintassi di definirla senza inizializzarla è praticamente sbagliata, in quanto non esiste e viene creata nell'istanza.
Ecco la creazione della proprietà prop in due istanze dell'oggetto:
function Oggetto(){
 this.prop;
}
var Istanza = new Oggetto();
var Istanza2=new Oggetto();
alert(Istanza.prop);
Istanza.prop="Proprieta";
alert(Istanza.prop);
Istanza2.prop="Proprieta dell'Istanza2";
alert(Istanza2.prop);
Ottengo i due valori di una proprietà che è stata creata indipendentemente nelle istanze, non nel costruttore!
Quindi quando io cerco di "cambiare" una variabile nel prototipo, sto piuttosto cercando di aggiungere una variabile che già esiste e quindi non posso sostituirla. Posso invece aggiungerla quando non c'è. Queste proprietà aggiunte nel prototipo possono essere modificate.
function Oggetto(){
 this.prop="Prima proprieta";
}
var Istanza = new Oggetto();
Oggetto.prototype.prop2="Seconda proprieta";
alert(Istanza.prop2);
Oggetto.prototype.prop2="Seconda proprieta modificata";
alert(Istanza.prop2);
Invece non possono essere modificate le proprietà presenti già nel costruttore:
function Oggetto(){
 this.prop="Prima proprieta";
}
var Istanza = new Oggetto();
Oggetto.prototype.prop2="Seconda proprieta";
alert(Istanza.prop2);
Oggetto.prototype.prop2="Seconda proprieta modificata";
alert(Istanza.prop2);
Oggetto.prototype.prop="Prima proprieta modificata";
alert(Istanza.prop);
La prima proprietà rimane sempre uguale a quella presente nel costruttore.

Nessun commento:

Posta un commento