2015-04-22 3 views
0

У меня есть код:Почему функция, добавленная setInterval, перестает выполняться?

function Creature(id){ 
    self = this; 

    this.lifecycle = {}; 
    this._cid = id; 

    this.lifeInterval = setInterval(function(){ 
     _.each(self.lifecycle,function(lifecycleItem){ 
      if (lifecycleItem.active) { lifecycleItem.execute() }; 
     }); 
    },1000); 
} 

Creature.prototype.run = function() { 
    self = this; 

    this.lifecycle.run = { 
     active : true, 
     execute : function(){ 
      console.log(self.cid + " is running"); 
     } 
    } 
}; 

Если я пытаюсь создать новую переменную с именем, например sampleCreature, и выполнить его метод Run():

var sampleCreature = new Creautre(1); 
sampleCreature.run(); 

В консоли появится сообщение:

1 работает

, который повторяется каждую секунду. Все хорошо.

Но если я добавлю новое существо с любым другим именем - сообщение в консоли перестанет повторяться, пока я снова не воспользуюсь методом run() на одном из существ.

И еще одна проблема - выполнение метода run() для первого существа прекращает выполнение этого на другом.

ответ

3

self является глобальным, а не местным. Добавьте var, чтобы они не перезаписывали друг друга.

self = this; 

должен быть

var self = this; 
+0

Спасибо, это помогает. Я должен больше узнать о глобальных и локальных переменных и его использовании. – AlexFreem

Смежные вопросы