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