Ho creato una classe Veicolo, che carica oggetti anzichè numeri.
Ossia il suo metodo carica() non ha come parametro un numero di passeggeri ma un oggetto passeggero, istanza della classe Persona.
Questa va posta in un Array che è la proprietà passeggeri della classe Veicolo.
Ecco:
<script> function Persona(nome){ this.nome=nome; } function Veicolo(passeggero){ this.passeggeri=[] this.carica=function(passeggero){ this.passeggeri.push(passeggero); } } Auto=new Veicolo(); Mario=new Persona("Mario"); Giuseppe=new Persona("Giuseppe"); Auto.carica(Mario); Auto.carica(Giuseppe); for(n=0;n<Auto.passeggeri.length;n++){alert(Auto.passeggeri[n].nome);} </script>Ottengo due caselle di testo con i nomi "Mario" e "Giuseppe".
Ora però riprovo l'esperimento che viene suggerito sul blog... ossia faccio caricare a un veicolo Mario e all'altro Giuseppe.
<script> function Persona(nome){ this.nome=nome; } function Veicolo(passeggero){ this.passeggeri=[] this.carica=function(passeggero){ this.passeggeri.push(passeggero); } } Auto1=new Veicolo(); Auto2=new Veicolo(); Mario=new Persona("Mario"); Giuseppe=new Persona("Giuseppe"); Auto1.carica(Mario); Auto2.carica(Giuseppe); for(n=0;n<Auto1.passeggeri.length;n++){alert("Sull'Auto1 ci sono "+Auto1.passeggeri[n].nome);} for(n=0;n<Auto2.passeggeri.length;n++){alert("Sull'Auto2 ci sono "+Auto2.passeggeri[n].nome);} </script>...Embeh?
Paradosso! Il codice funziona egregiamente, e mi dice che sull'Auto1 c'è Mario e sull'Auto2 c'è Giuseppe!
Eppure secondo il "maestro" non dovrebbe funzionare, e dovrebbe specificarmi che invece Mario e Giuseppe si troverebbero paradossalmente su tutte e due le auto!
Perchè?
Forse è perchè nell'esempio del sito la proprietà passeggeri non è dichiarata con il this ma con il var.
Proviamo...
Dato che la variabile dichiarata con il var risulta privata, ossia non visibile all'esterno della funzione, devo crearmi un metodo che mi "metta all'esterno" i valori contenuti in essa.
<script> function Persona(nome){ this.nome=nome; } function Veicolo(passeggero){ this.passeggeri=[] this.carica=function(passeggero){ this.passeggeri.push(passeggero); } this.listaPasseggeri=function(){ for(n=0;n<this.passeggeri.length;n++){alert(this.passeggeri[n].nome);} } } Auto1=new Veicolo(); Auto2=new Veicolo(); Mario=new Persona("Mario"); Giuseppe=new Persona("Giuseppe"); Auto1.carica(Mario); Auto2.carica(Giuseppe); Auto1.listaPasseggeri(); Auto2.listaPasseggeri(); </script>Ecco: così ottengo DUE caselle di testo con scritto Mario (il passeggero di Auto1) e Giuseppe (il passeggero di Auto2).
Tutto regolare!
E se rendo privata la proprietà passeggeri? Mi sa che non ho capito molto bene la lezione del "maestro"...
Nessun commento:
Posta un commento