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