【发布时间】:2013-03-25 09:17:31
【问题描述】:
今天我发现当你在 Javascript 中将对象的方法作为函数传递时会发生一个相当奇怪的行为。
setTimeout(myObject.test, 100); // "this" is the global object window
方法“test”被正确调用,但“this”不是对象“myObject”,而是全局对象“window”。当我做这样的事情时,我可以获得预期的行为:
setTimeout(function(){myObject.test()}, 100); // "this" is myObject
这在我看来很奇怪。谁能解释一下,为什么会这样。
【问题讨论】:
-
您所描述的内容可能很奇怪,当您习惯于 AS3 或 Java 等语言时 - 但在 JS 中这是预期的行为,默认范围是任何事件或超时的“窗口”-功能等。所以你通常总是需要通过匿名函数。
标签: javascript function methods