当向数组中添加新项时,setInterval自行停止

问题描述:

我试图创建一个新的对象,它将从开始时开始异步运行,并在创建时将对象推入数组中。每当我通过单击按钮添加一个新对象时,数组中的任何其他setInterval对象都将停止。然后再添加一个,所有这些都重新开始。这里发生了什么?当向数组中添加新项时,setInterval自行停止

这里是代码片段:

floor = { 
    w_house: function() { 
     this.shop = 'w_house'; 
     this.villains = []; 
     this.thieves = 0; 
     that = this; 
     setInterval(function() { 
      if(that.thieves > 0) { 
       console.log(that.thieves); 
      } 
     }, 10); 
     lair.push(this); 
     return $('<li/>').addClass('w_house').addClass('floor').append($('<div/>').addClass('test').text('test')); 
}} 

lair = []; 

$('.button').live('click', function() { 
     $('#lair ul').append(new floor[$(this).attr('id')]()); 
}); 

谢谢!

请尝试下面的代码。这是不是安全的解决这个传递的构造函数(在某些浏览器):

floor = { 
    w_house: function() { 
     this.shop = 'w_house'; 
     this.villains = []; 
     this.thieves = 0; 
     this.init = function() { 
     setInterval(function() { 
      if(this.thieves > 0) { 
       console.log(this.thieves); 
      } 
     }, 10); 
     lair.push(this); 
     return $('<li/>').addClass('w_house').addClass('floor').append($('<div/>').addClass('test').text('test')); 
     }; 
}} 

lair = []; 

$('.button').live('click', function() { 
     var floor_house = new floor[$(this).attr('id')](); 
     $('#lair ul').append(floor_house.init()); 
}); 
+0

感谢您的建议和快速回复。但它没有工作:( – user1804798

+0

症状仍然是一样的吗? – closure

+0

是的编辑︰似乎只setTimeout的最后一个项目工作。以前的一旦被推入一个新的被取消。 – user1804798

您还没有表现出在那里你增加你的对象的thieves成员,但你that变了全球范围内,每一个功能执行覆盖它的价值。试试:

var that = this; 
+0

你是上帝!谢谢!!!!!编辑:我知道这是一个全球性的问题。它会清楚。 – user1804798