当向数组中添加新项时,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());
});
答
您还没有表现出在那里你增加你的对象的thieves
成员,但你that
变了全球范围内,每一个功能执行覆盖它的价值。试试:
var that = this;
+0
你是上帝!谢谢!!!!!编辑:我知道这是一个全球性的问题。它会清楚。 – user1804798
感谢您的建议和快速回复。但它没有工作:( – user1804798
症状仍然是一样的吗? – closure
是的编辑︰似乎只setTimeout的最后一个项目工作。以前的一旦被推入一个新的被取消。 – user1804798