javascript setInterval不适用于对象

所以,我正在尝试创建一个javascript对象,并使用setInterval方法。

这似乎不起作用。 如果我删除引号,则该方法运行一次。 有什么想法吗? 另外,我正在使用Jquery。

 $(function(){ var kP = new Kompost(); setInterval('kP.play()', kP.interval); }); var Kompost = function() { this.interval = 5000; var kompost = this; this.play = function() { alert("hello"); } }  

这样叫:

 $(function(){ var kP = new Kompost(); setInterval(kP.play, kP.interval); }); 

问题是kPdocument.ready处理程序中,并且在全局上下文中不可用(它只在该闭包内部可用)。 将字符串传递给setInterval()setTimeout()它将在全局上下文中执行。

如果你检查你的控制台,你会发现它错误,说kP是未定义的,在这种情况下是正确的。 总的来说,它应该是这样的:

 var Kompost = function() { this.interval = 5000; var kompost = this; this.play = function() { alert("hello"); }; }; $(function(){ var kP = new Kompost(); setInterval(kP.play, kP.interval); }); 

你可以看到它在这里工作

@Yacoby和@Nick提供的解决方案仅在play方法本身不使用this值时才有效,因为this值将指向全局对象。

要处理这个问题,您需要另一种方法,例如:

 $(function(){ var kP = new Kompost(); setInterval(function () { kP.play(); }, kP.interval); }); 

也可以看看:

  • this问题

它适用于像thymeleaf等的每个地方……

 function load() { alert("Hello World!"); } setInterval(function () {load();}, 10000);