gpt4 book ai didi

javascript - 为什么调用带有括号的方法,例如。 (obj.func)(),仍然设置 `this` 吗?

转载 作者:行者123 更新时间:2023-12-02 16:55:31 28 4
gpt4 key购买 nike

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com