为什么调用带括号的方法,例如(obj.func)(),仍然设置“this”
Why does calling a method with parenthesis, eg. (obj.func)(), still set `this`?
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
上下文的值取决于函数调用的类型。
在您的案例中,它是一个方法调用——一个由属性引用调用的函数。是的,括号不计算属性引用。
有关详细信息,请参阅JS绑定函数和函数调用运算符的性质以及这个非常好的答案。
相关文章:
- 如何通过函数调用设置图像的src
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 是否可以在调用时动态设置Jquery Accordion的活动面板
- 敲除js变量设置类似于调用函数
- 没有通过ajax调用设置Javascript全局变量
- 为接收事件的函数调用设置超时不适用于 IE7
- 为 jQuery Datatables ajax 调用设置错误处理程序
- 承诺与函数调用/设置超时
- Angular JS:如何为通过$http的所有调用设置上下文路径
- ng-bind在API调用设置数据后不显示任何内容
- 如何将回调顺序调用设置为与目标函数调用相同
- Bootstrap 3 Datepicker v4调用设置带有时刻或日期的日期
- 使用特定的ajax调用设置集合获取
- 通过ajax调用设置变量
- 为什么在调用设置新$的函数时,我的延迟对象被设置为resolved而不是pending ?多次延期
- 通过Node异步调用设置变量的正确模式
- Worklight:如何为WL.Client.invokeProcedure调用设置使用addGlobalHeader
- 在AngularJS中为all $https调用设置相对路径
- 在IE7中,我如何在jquery .click事件期间使用ajax调用设置全局变量或元素值
- 如何在ajax函数之外为我的ajax调用设置一个带参数的回调函数