JS中的解析规则究竟是什么导致以下结果:
我们说我们有这个功能
getThis = function(){
return this;
}
这些都可以使用"之前的点"规则:
getThis(); //=> Window
obj = {getThis: getThis};
obj.getThis(); //=> obj
getThisTwo = obj.getThis;
getThisTwo(); //=> Window
然而,这让我感到惊讶:
(obj.getThis)() //=> obj ...WAT
我的直觉是它的行为与第三个例子(getThisTwo
)完全相同。即,括号中的部分被计算,它返回一个匿名函数,然后调用该函数。我的期望是this
将是Window
,而不是obj
。
这是一个特例,还是我对this
如何解决错误的理解?
(编辑使我混淆的原因更清楚)
答案 0 :(得分:2)
是。调用的this
context的值取决于函数调用的类型。
在您的情况下,它是方法调用 - 由属性引用调用的函数。是的,parentheses 不评估属性引用。
有关详细信息,另请参阅Nature of JS bound functions and function invocation operator和this very good answer。