This question already has answers here:
How does JavaScript determine when to give a function call a “this” context? [duplicate]
(2个答案)
5年前关闭。
JS中的解析规则到底是什么,导致以下结果:
假设我们有这个功能
这些都可以使用“上一个点”规则按预期工作:
但是,这让我感到惊讶:
我的直觉是它的行为与第三个示例(
这是特殊情况,还是我对
(编辑使我的混乱的原因更加清楚)
(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 operator和this very good answer。
关于javascript - 为什么调用带有括号的方法,例如。 (obj.func)(),仍然设置`this`? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26208996/