var Test = (function() {
return {
someValue: 69,
staticMethod: function(){
return this.someValue;
}
}
}());
console.log(Test.staticMethod());
var doIt = Test.staticMethod
console.log(doIt())
Выход:это не определено, при вызове переменной набор для статического метода
69
undefined
Ожидаемое:
69
69
Почему this
не существует в контексте второго вызова ?
Демо: http://jsbin.com/kidefoniko/edit?js,console
Потому что функция вызывается без объекта как контекста. Это значение любой функции зависит от контекста выполнения. – adeneo
, так что правильный путь 'doIt.call (Test)'? Что, если я не знаю, что это Тест? В любом случае, чтобы узнать его контекст – LearningJrDev
Не совсем, контекст - это то, что вы установили, это не предопределено. Когда вы выполняете 'Test.staticMethod()' вы устанавливаете контекст в 'Test', во втором примере вы создаете ссылку на эту функцию, а затем вызываете ее без контекста, поэтому вам нужно использовать' call', 'apply' или 'bind', чтобы установить контекст. – adeneo