All'interno della funzione anonima this
è l'oggetto globale.
All'interno di test
, questa è l'istanza di MyObject
su cui è stato richiamato il metodo.
Ogni volta che si chiama una funzione come questa:
somceFunction(); // called function invocation
this
è sempre l'oggetto globale, o undefined
in modalità rigorosa (a meno che non someFunction
è stato creato con bind
** - vedi sotto)
Ogni volta che si chiama una funzione come questa
foo.someMethod(); //called method invocation
this
è impostato su foo
** EcmaScript5 definisce una funzione bind
che ti permette di creare una funzione che ha un valore pre-impostato per this
Quindi questo
var obj = { a: 12 };
var someFunction = (function() { alert(this.a); }).bind(obj);
someFunction();
Le cause someFucntion
ad essere invocate con this
pari a obj
e avvisi 12. Ho portare questo solo per notare che questo è un potenziale eccezione alla regola che ho citato sulle funzioni invocate come
someFunction();
avere sempre this
pari a l'oggetto globale (o undefined
in modalità rigorosa)
fonte
2011-12-29 17:09:18
Benvenuti in ambito funzionale in JavaScript. – zzzzBov
@zzzzBov: Questa non è una chiusura. – SLaks
Potrebbe essere utile utilizzare un'ulteriore coppia di paren per migliorare la leggibilità: '(new MyObject()) .test()' –