Ci provo.
Inizio con il creare una classe Madre e una classe Figlia.
function Madre(){ var nome=""; this.nomina=function(n){ nome=n; } this.presentati=function(){ alert("Mi chiamo "+nome); } } function Figlia(){ var soprannome=""; } Figlia.prototype=new Madre();Ora creo due istanze della classe Madre e le nomino. Si dovrebbero presentare ognuna con il suo nome:
Maria=new Madre(); Maria.nomina("Maria"); Lucia=new Madre(); Lucia.nomina("Lucia"); Maria.presentati(); Lucia.presentati();...e ottengo "Mi chiamo Maria" e "Mi chiamo Lucia". Come previsto.
Ora creo due istanze della classe Figlia...
Barbara=new Figlia(); Barbara.nomina("Barbara"); Giuliana=new Figlia(); Giuliana.nomina("Giuliana"); Barbara.presentati(); Giuliana.presentati();E cosa ottengo?
Ottengo per due volte "Mi chiamo Giuliana"!
Se inverto le due:
Giuliana=new Figlia(); Giuliana.nomina("Giuliana"); Barbara=new Figlia(); Barbara.nomina("Barbara"); Giuliana.presentati(); Barbara.presentati();Ottengo per due volte "Mi chiamo Barbara"!
Evidentemente la funzione Madre viene utilizzata da ambedue, e mentre all'inizio il metodo nomina dell'istanza Barbara modifica la variabile nome in "Barbara", successivamente il metodo nomina dell'istanza Giuliana modifica la stessa variabile nome in "Giuliana".
O viceversa.
La soluzione?
<script>
function Madre(){
var nome="";
this.nomina=function(n){
nome=n;
}
this.presentati=function(){
alert("Mi chiamo "+nome);
}
}
function Figlia(){
Madre.call(this);
var soprannome="";
}
Figlia.prototype=new Madre();
Giuliana=new Figlia();
Giuliana.nomina("Giuliana");
Barbara=new Figlia();
Barbara.nomina("Barbara");
Giuliana.presentati();
Barbara.presentati();
</script>
Il fatto è che le istanze della classe derivata condividono una sola istanza della classe genitrice. Se una variabile in questa non è dichiarata this, si fa riferimento a una sola variabile, che viene modificata ora da una ora dall'altra istanza. Non è molto facile, ma sembra che ci sto cominciando a capire qualcosa, dato che sono riuscito a personalizzare l'esempio del tutorial creandomi, come sempre un esempio tutto mio.
Nessun commento:
Posta un commento