如果仅包含属性访问器,括号会被忽略吗?

nik*_*ica 6 javascript syntax

给定以下代码,为什么不(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
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 2

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