2

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

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

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

var Kompost = function()
{
   this.interval = 5000;
   var kompost = this;

   this.play = function()
   {
      alert("hello");
   }
}
</script>
4

3 回答 3

8

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

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

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

也可以看看:

于 2010-07-13T23:28:22.973 回答
7

像这样称呼它:

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

问题在于该处理程序kP内部且在全局上下文中不可用(它仅在该闭包内部可用)。当您将字符串传递给或在全局上下文中执行时。document.readysetInterval()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);
});

你可以看到它在这里工作

于 2010-07-13T23:25:36.353 回答
0

它适用于百里香等任何地方......

function load() {
  alert("Hello World!");
}
setInterval(function () {load();}, 10000);
于 2015-07-23T12:19:59.357 回答