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); });
问题是kP
在document.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);