<script> function funzione(){ this.dichiara=function(){ alert(this); } } function funzione2(){ this.chiama=function(){ f1.dichiara(); } } f1=new funzione(); f2=new funzione2(); f2.chiama(); </script> </script>
Ottengo [Object object].
Essendo il metodo della funzione 1 un metodo di un oggetto, il contesto è quello dell'oggetto, non quello della finestra.
Infatti la chiamata viene fatta anteponendo f1, che è l'identificatore dell'oggetto.
Adesso chiamo lo stesso metodo della funzione 1 da un contesto window. Ci provo.
<script> function funzione(){ this.dichiara=function(){ alert(this); } } function funzione2(){ this.chiama=function(){ funzione(); dichiara(); } } f1=new funzione(); f2=new funzione2(); f2.chiama(); </script>
Ottengo [Object Window].
Prima ho dovuto "materializzare" la funzione nel contesto di window, quindi chiamare lo stesso metodo senza farlo precedere dall'identificatore.
Posso chiamare la funzione sia nell'ambito di window sia come oggetto diverso, scegliendo di volta in volta se chiamare da un contesto window o da un contesto oggetto.
Questa chiama la funzione dichiara nell'ambito di un oggetto:
<script> function funzione(){ this.dichiara=function(){ alert(this); } } function funzione2(){ this.chiama=function(){ f1.dichiara(); } } funzione(); f1=new funzione(); f2=new funzione2(); f2.chiama(); </script>e ottengo [object Object]
Questa chiama la funzione dichiara nell'ambito della finestra:
<script> function funzione(){ this.dichiara=function(){ alert(this); } } function funzione2(){ this.chiama=function(){ dichiara(); } } funzione(); f1=new funzione(); f2=new funzione2(); f2.chiama(); </script>e ottengo [object Window].
Spero di essermela spiegata abbastanza bene...
Nessun commento:
Posta un commento