我知道如何解決這個特定的問題,但我想知道它爲什麼會發生。基本上,當我嘗試調用的函數是這樣的:由三元運算符返回的函數丟失上下文
(callFoo ? this.foo : this.bar)();
它調用正確的富功能,但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)();
正是我所期待的。謝謝。並感謝您更正'(+ obj.getConstructor)()'位。我試圖想到類似的東西,但我不能。 – lbstr
是的,我不應該認爲這只是因爲它可以與匿名函數一起工作。奇怪的是,本地對象方法並不一定遵循相同的行爲,即使它們的行爲好像他們以其他方式使用「this」一樣。 –