0

我正在尝试创建一个新对象,该对象将从一开始就异步运行,并且在创建后,该对象将被推送到一个数组中。每当我通过单击按钮添加新对象时,数组中对象的任何其他 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')]());
});

谢谢!

4

2 回答 2

0

试试下面的代码。在构造函数中传递 this 是不安全的(在某些浏览器上):

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());
});
于 2012-12-21T18:57:37.603 回答
0

您没有显示增加thieves对象成员的位置,但是您的that变量具有全局范围,每个函数执行都会覆盖其值。尝试:

var that = this;
于 2012-12-21T19:23:21.100 回答