2013-08-16 2 views
1

Дать код, и при создании экземпляра класса, что-то странное происходит с целочисленной переменной у меня есть:Integer возвращается в качестве NaN при добавлении

function Mat(x, y, spawner) { 
    this.x = x; 
    this.y = y; 
    this.val = 1; 
    this._spawner = spawner; 
    this.newborn = true; 
    this.bornTime = 0; 
    this.spawnTimer = setInterval("this.bornTime++; console.log(this.bornTime);", 1000); 
} 

Довольно вырезать и ясно код; каждую секунду после создания экземпляра переменной, она должна увеличивать значение переменной bornTime на 1 и регистрировать ее.

Mat.prototype.update = function() { 
    if (this.bornTime >= 5) { 
     this.bornTime = null; 
     clearInterval(this.spawnTimer); 
     this.newborn = false; 
     console.log("Grown!"); 
    } 
} 

Этот дополнительный код вызовет этот экземпляр будет «выращены» через 5 секунд, однако, когда я проверяю консоль, он читает, что bornTime не является числом (NaN).

Почему это, и есть ли решение, которого я не вижу?

ответ

3

this внутри setTimeout код не совпадает с внешним (подробнее о MDN), так что ваш код на самом деле вычисления undefined++, который NaN.

Вы должны создать еще одну переменную, и передать функцию SetTimeout вместо того, чтобы позволить ему Eval строку (кстати, передавая функции должен быть быстрее, и выглядит лучше):

var that = this; 
this.spawnTimer = setInterval(function(){ 
    that.bornTime++; 
    console.log(that.bornTime); 
}, 1000); 
Смежные вопросы