Внутри вашей анонимной функции this
- глобальный объект.
Внутри test
это экземпляр MyObject
, для которого был вызван метод.
Каждый раз, когда вы вызываете функцию, подобную этой:
somceFunction(); // called function invocation
this
- это всегда глобальный объект или undefined
в строгом режиме (если someFunction
не был создан с bind
** - см. Ниже)
всякий раз, когда вы вызываете такую функцию,
foo.someMethod(); //called method invocation
this
установлено на foo
** EcmaScript5 определяет функцию bind
, которая позволяет создавать функцию, которая имеет предварительно установленное значение для this
Так вот
var obj = { a: 12 };
var someFunction = (function () { alert(this.a); }).bind(obj);
someFunction();
Вызывает someFucntion
для вызова с this
равным obj
и предупреждениями 12. Я поднимаю это только для того, чтобы отметить, что это потенциальное исключение из упомянутого мною правила о функциях, вызываемых как
someFunction();
всегда с this
равным глобальному объекту (или undefined
в строгом режиме)