首页 > 解决方案 > 如果括号仅包含属性访问器,是否会忽略括号?

问题描述

鉴于以下代码,为什么不(obj.foo)()接收windowas this?在我看来,括号被忽略了,而不是被视为计算结果为foo?

window.bar = 'window';
const obj = { bar: 'obj' };

obj.foo = function() {
  console.log(`Called through ${this.bar}`);
}

obj.foo(); // Called through obj

(obj.foo)(); // Called through obj - Why?

(0, obj.foo)(); // Called through window

(true && obj.foo)(); // Called through window

标签: javascriptsyntax

解决方案


它们没有被忽略,但结果与(请参阅规范中的本节(obj.foo))的结果是相同的参考(规范术语)。因此,属性访问器具有相同的信息来获取对象和属性并将该对象用作.obj.foothis


推荐阅读