我知道如何解决这个特殊问题,但我想知道它为什么会发生。基本上,当我尝试调用这样的函数时:
(callFoo ? this.foo : this.bar)();
它调用了正确的 foo 函数,但在 foo 内部,this
是全局的窗口对象,而不是我期望的对象。
我希望这会做同样的事情,但它不会:
(this.foo)();
上面的代码调用了正确的函数并维护了正确的上下文(this
这是我所期望的)。
有人可以解释发生了什么吗?我知道如何解决这个问题(我什至不喜欢这种语法),但我仍然想知道this
如果你从三元运算符返回一个函数,为什么会变成窗口。
编辑
我想完善我的问题:这对我来说很有意义:
(callFoo ? this.foo : this.bar)();
相当于:
var f = (callFoo ? this.foo : this.bar);
f();
这对我来说很有意义,为什么this
会成为该功能中的窗口。
为什么这里没有发生同样的事情:
(this.foo)();