javascript setInterval не работает для объекта - PullRequest
2 голосов
/ 14 июля 2010

ТАК, я пытаюсь создать объект 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>

Ответы [ 3 ]

8 голосов
/ 14 июля 2010

Решение, предоставляемое @Yacoby и @Nick, будет работать только в том случае, если метод play не использует значение this внутри себя, поскольку значение this будет указывать на глобальный объект.

Для этого вам нужен другой подход, например:

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

Смотри также:

7 голосов
/ 14 июля 2010

Назовите это так:

$(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);
});

Вы можете увидеть, как это работает здесь

0 голосов
/ 23 июля 2015

Работает везде, как тимелист и т.д ...

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