<script type="text/javascript"> funz =function(){ alert(this); setInterval("this.funzione()",1000); } var oggetto={ funzione: function(){ alert("hu"); }, chiama: function(){ funz.call(this); } }; oggetto.chiama(); </script> <body></body>La funzione si svolge nel contesto dell'oggetto, in quanto il this è [object Object]
In IE ottengo il messaggio di errore: proprietà o metodo non supportato dall'oggetto. Probabilmente si riferisce al metodo setInterval che non è presente nell'oggetto.
Ora non uso il this
<script type="text/javascript"> funz =function(){ alert(this); setInterval("this.funzione()",1000); } var oggetto={ funzione: function(){ alert("hu"); }, chiama: function(){ funz.call(); } }; oggetto.chiama(); </script> <body></body>L'output è [object Window]. Questo significa che la funzione si svolge nel contesto di window.
Il messaggio di errore è sempre proprietà o metodo non supportato dall'oggetto, che probabilmente si riferisce al metodo this.funzione().
Il problema con setInterval è che dato che questo è un metodo di window viene svolto nello scope di window, e non può vedere i metodi dell'oggetto dall'interno, ma solo dall'esterno.
<script type="text/javascript"> funz =function(){ alert(this); setInterval("oggetto.funzione()",1000); } var oggetto={ funzione: function(){ alert("hu"); }, chiama: function(){ funz.call(); } }; oggetto.chiama(); </script> <body></body>Così funziona benissimo, perchè la funzione si svolge nello scope di window e vede dall'esterno i metodi dell'oggetto non indirizzati con this ma con il nome dell'oggetto.
Ma quando si abbia a che fare con un costruttore, nel quale bisogna usare necessariamente il this, allora vengono fuori i problemi.
Nessun commento:
Posta un commento