在类中执行多个setTimeout

时间:2012-10-03 00:08:22

标签: javascript class settimeout

我有一个javascript类对象,我想在同一页面上多次使用,它需要一个setTimeout函数才能工作,因为它在后台继续滴答作响。但是,正如你可以在这个小提琴中看到的那样,在超时调用中,它只引用了对象的最新实例。有谁知道我怎么排序它?最好,我想看看它是如何在jQuery中完成的,我想知道它是如何做到的。

http://jsfiddle.net/cgoddard/yQDLe/20/

1 个答案:

答案 0 :(得分:2)

当您在双嵌套函数中编写this.doDelayed时,this关键字不会引用您的test对象。相反,它指的是当前正在执行的函数被调用的任何对象,可能是window

要解决此问题,您必须将this保存在test功能的最开头,例如:var $this = this;
然后,您可以使用$this来引用该对象。

除此之外,当您只编写x = something时,符号x被视为window对象上的属性(也称为“全局变量”)。因此,doDelayedconstruct函数都会以window对象结尾。因此,当你第二次这样做时,它们都会被覆盖。这就是为什么你得到两次相同的结果 相反,您应该写$this.doDelayed = function() ...(其中$this是您从上方保存的this值),并对construct执行类似操作。