Facciamo accedere una funzione esterna a una variabile pubblica dell'oggetto.
<script>
function oggetto(nome, cognome){
this.nome=nome;
this.cognome=cognome;
}
function scrivi(){
alert(this.nome+" "+this.cognome);
}
function azione(){
Mario=new oggetto("Mario", "Rossi");
scrivi.call(Mario);
}
</script>
<body onLoad="azione();">
</body>
Output: "Mario Rossi".Conclusione: una funzione esterna usata con il call può leggere le variabili pubbliche di un oggetto.
Proviamo con le variabili private:
<script>
function oggetto(nome, cognome){
var nome=nome;
var cognome=cognome;
}
function scrivi(){
alert(this.nome+" "+this.cognome);
}
function azione(){
Mario=new oggetto("Mario", "Rossi");
scrivi.call(Mario);
}
</script>
<body onLoad="azione();">
</body>
Output: "undefined undefined".Se poi elimino il this dalla funzione esterna...
<script>
function oggetto(nome, cognome){
var nome=nome;
var cognome=cognome;
}
function scrivi(){
alert(nome+" "+cognome);
}
function azione(){
Mario=new oggetto("Mario", "Rossi");
scrivi.call(Mario);
}
</script>
<body onLoad="azione();">
</body>
ottengo una pagina completamente bianca e un errore: nome non è definito.Conclusione: una funzione chiamata con il call non può leggere le variabili private. Dunque ha uno scope pubblico.
Questo è meno lapalissiano...
Nessun commento:
Posta un commento