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