io sono un principiante di chiusure (e javscript in generale), e non riesco a trovare una spiegazione soddisfacente per quello che sta succedendo in questo codice:Perché questa chiusura non ha accesso alla parola chiave "this"? - jQuery
function myObject(){
this.myHello = "hello";
this.myMethod = do_stuff;
}
function do_stuff(){
var myThis = this;
$.get('http://example.com', function(){
alert(this.myHello);
alert(myThis.myHello);
});
}
var obj = new myObject;
obj.myMethod();
avviserà 'undefined' e poi 'ciao'. Ovviamente questo non dovrebbe essere jQuery specifico, ma questa è la forma più semplice del mio codice originale che potrei inventare. La chiusura in do_stuff()
ha accesso alle variabili in tale ambito, ma a quanto pare questa regola non si applica alla parola chiave this
.
Domande:
Cosa succede al this
quando la chiusura è passato al di fuori del campo di applicazione del do_stuff()
(in questo caso $.get()
)? myThis
contiene una copia di this
o un riferimento ad esso? Non è generalmente una buona idea usare this
nelle chiusure?
Qualsiasi risposta molto apprezzata.
Stavo per chiedere un seguito ma la tua ultima modifica ha risposto. Grazie! – thewiglaf
@thewiglaf: Prego! Sentiti libero di commentare se hai dei dubbi ... – CMS