【发布时间】:2012-10-04 21:21:02
【问题描述】:
我知道如何解决这个特殊问题,但我想知道它为什么会发生。基本上,当我尝试调用这样的函数时:
(callFoo ? this.foo : this.bar)();
它调用了正确的 foo 函数,但在 foo 内部,this 是全局窗口对象,而不是我期望的对象。
我希望这会做同样的事情,但事实并非如此:
(this.foo)();
上面的代码调用了正确的函数并维护了正确的上下文(this 是我所期望的)。
Here is a jsfiddle for you to play around with.
有人可以解释发生了什么吗?我知道如何解决这个问题(我什至不喜欢这种语法),但我仍然想知道如果你从三元运算符返回一个函数,为什么 this 会变成窗口。
编辑
我想完善我的问题:
这对我来说很有意义:
(callFoo ? this.foo : this.bar)();
相当于:
var f = (callFoo ? this.foo : this.bar);
f();
为什么this 成为该函数中的窗口对我来说很有意义。
为什么这里没有发生同样的事情:
(this.foo)();
【问题讨论】:
标签: javascript ternary-operator