我有一个javascript类对象,我想在同一页面上多次使用,它需要一个setTimeout
函数才能工作,因为它在后台继续滴答作响。但是,正如你可以在这个小提琴中看到的那样,在超时调用中,它只引用了对象的最新实例。有谁知道我怎么排序它?最好,我想看看它是如何在jQuery中完成的,我想知道它是如何做到的。
答案 0 :(得分:2)
当您在双嵌套函数中编写this.doDelayed
时,this
关键字不会引用您的test
对象。相反,它指的是当前正在执行的函数被调用的任何对象,可能是window
。
要解决此问题,您必须将this
保存在test
功能的最开头,例如:var $this = this;
然后,您可以使用$this
来引用该对象。
除此之外,当您只编写x = something
时,符号x
被视为window
对象上的属性(也称为“全局变量”)。因此,doDelayed
和construct
函数都会以window
对象结尾。因此,当你第二次这样做时,它们都会被覆盖。这就是为什么你得到两次相同的结果
相反,您应该写$this.doDelayed = function() ...
(其中$this
是您从上方保存的this
值),并对construct
执行类似操作。