JavascriptProva

venerdì 20 gennaio 2012

Esercizi di scope

Ho un costruttore oggetto.

Il metodo scrivi appartiene a questo oggetto.
Agisce da dentro questo oggetto.
Ora gli faccio leggere delle variabili pubbliche dell'oggetto e poi delle variabili private.

Variabili pubbliche:
<script>

function oggetto(nome, cognome){
 this.nome=nome;
 this.cognome=cognome;
 this.scrivi = function(){
  alert(nome+" "+cognome);
 }
}

function azione(){
 Mario=new oggetto("Mario", "Rossi");
 Mario.scrivi();
}
</script>
<body onLoad="azione();">
</body>
Ho stabilito la convenzione di marcare le variabili pubbliche in verde.
L'output è una casella di avviso con scritto "Mario Rossi".
Conclusione: il metodo legge le variabili pubbliche dello stesso oggetto(è lapalissiano).
Ora leggo le variabili pubbliche da una funzione esterna all'oggetto:
<script>

function oggetto(nome, cognome){
 this.nome=nome;
 this.cognome=cognome;
 this.scrivi = function(){
  alert(nome+" "+cognome);
 }
}

function azione(){
 Mario=new oggetto("Mario", "Rossi");
 alert(Mario.nome+" "+Mario.cognome);
}
</script>
<body onLoad="azione();">
</body>
Output: "Mario Rossi".
Conclusione: la funzione esterna legge le variabili pubbliche di un oggetto.
Ora ripeto l'esperimento con variabili private (che per convenzione segno in rosso)
<script>

function oggetto(nome, cognome){
 var nome=nome;
 var cognome=cognome;
 this.scrivi = function(){
  alert(nome+" "+cognome);
 }
}

function azione(){
 Mario=new oggetto("Mario", "Rossi");
 Mario.scrivi();
}
</script>
<body onLoad="azione();">
</body>
Output: "Mario Rossi".
Conclusione: il metodo legge le variabili private dello stesso oggetto..
Ora cerco di leggere le variabili private da una funzione esterna:
<script>

function oggetto(nome, cognome){
 var nome=nome;
 var cognome=cognome;
 this.scrivi = function(){
  alert(nome+" "+cognome);
 }
}

function azione(){
 Mario=new oggetto("Mario", "Rossi");
 alert(Mario.nome+" "+Mario.cognome);
}
</script>
<body onLoad="azione();">
</body>
Output: "undefined undefined". Conclusione: la funzione esterna non legge le variabili private di un oggetto.

Tutto lapalissiano, del resto, ma è bene allenarsi!

Nessun commento:

Posta un commento