Dentro de su función anónima this
es el objeto global.
Dentro de test
, esta es la instancia de MyObject
en la que se invocó el método.
Cada vez que se llama a una función como esta:
somceFunction(); // called function invocation
this
es siempre el objeto global, o undefined
en modo estricto (a menos someFunction
fue creado con bind
** - véase más adelante)
Siempre que llame a una función como esta
foo.someMethod(); //called method invocation
this
se establece en foo
** ECMAScript5 define una función bind
que le permite crear una función que tiene un valor pre-establecido para this
Así que este
var obj = { a: 12 };
var someFunction = (function() { alert(this.a); }).bind(obj);
someFunction();
Causas someFucntion
a ser invocados con this
igual a obj
y alertas 12. Menciono esto sólo para en cuenta que esta es una posible excepción a la regla que he mencionado acerca de las funciones invocadas como
someFunction();
teniendo siempre igual a this
el objeto global (o undefined
en modo estricto)
Bienvenido al alcance funcional en JavaScript. – zzzzBov
@zzzzBov: Eso no es un cierre. – SLaks
Es posible que desee utilizar un par adicional de parens para mejorar la legibilidad: '(new MyObject()) .test()' –