Javascript 为什么用括号调用方法,例如(obj.func)(),仍然设置“this”?

Javascript 为什么用括号调用方法,例如(obj.func)(),仍然设置“this”?,javascript,scope,this,Javascript,Scope,This,JS中导致以下结果的解析规则是什么: 假设我们有这个函数 getThis = function(){ return this; } 使用“上一个点”规则,所有这些都可以正常工作: 然而,这让我感到惊讶: (obj.getThis)() //=> obj ...WAT 我的直觉是,它的行为与第三个示例完全相同(gethistwo)。即,对括号中的部分求值,返回一个匿名函数,然后调用该函数。我的期望是这个将是窗口,而不是obj 这是一种特殊情况,还是我对如何解决此问题的理解有误 (编辑

JS中导致以下结果的解析规则是什么:

假设我们有这个函数

getThis = function(){
  return this;
}
使用“上一个点”规则,所有这些都可以正常工作:

然而,这让我感到惊讶:

(obj.getThis)() //=> obj ...WAT
我的直觉是,它的行为与第三个示例完全相同(
gethistwo
)。即,对括号中的部分求值,返回一个匿名函数,然后调用该函数。我的期望是
这个
将是
窗口
,而不是
obj

这是一种特殊情况,还是我对如何解决此问题的理解有误

(编辑以使我困惑的原因更清楚)

是的。调用的值取决于函数调用的类型

在您的例子中,它是一个方法调用——一个由属性引用调用的函数。是的,不要评估属性引用

有关详细信息,请参见和

(obj.getThis)() //=> obj ...WAT