Внутри вашей анонимной функции 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
в строгом режиме)
Добро пожаловать в функциональную область JavaScript. – zzzzBov
@zzzzBov: Это не закрытие. – SLaks
Возможно, вы захотите использовать дополнительную пару парнеров для улучшения читаемости: '(new MyObject()) .test()' –