This question already has answers here:
How does JavaScript determine when to give a function call a “this” context? [duplicate]
                            
                                (2个答案)
                            
                    
                5年前关闭。
        

    

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的解决方式的理解有误?

(编辑使我的混乱的原因更加清楚)

最佳答案

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

在您的情况下,它是方法调用-由属性引用调用的函数。是的,parentheses不评估属性引用。

有关详细信息,另请参见Nature of JS bound functions and function invocation operatorthis very good answer

关于javascript - 为什么调用带有括号的方法,例如。 (obj.func)(),仍然设置`this`? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26208996/

10-14 16:04
查看更多