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