По понятным причинам, в JavaScript, следующие два вызова отличаются:
foo.bar();
var bar = foo.bar;
bar();
А именно, при первом вызове this
является объектом foo
. Во-вторых, это ссылка на глобальную сферу. Однако следующий пример немного менее интуитивно понятен:
(foo.bar)();
Я бы ожидал, что он будет работать так же, как второй пример, но он фактически работает так же, как и первый. То есть this
ссылается foo
, а не глобальная область.
Каковы правила JavaScript для принятия решения о том, как сделать вызов функции "вызовом метода" и когда просто вызвать функцию без определенного this
?
EDIT:
Как Феликс Клинг указывает в комментарии, мне интересно, почему третий пример не использует контекст window
, когда теоретически он должен просто получить и вызывать его без дополнительного контекста. Его пример немного разъясняет мой вопрос:
(true && foo.bar)(); // 'this' refers to the global scope