添加时返回为NaN的整数

时间:2013-08-16 22:32:38

标签: javascript timer setinterval 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)。

为什么会这样,有没有我没有看到的解决方案?

2 个答案:

答案 0 :(得分:3)

this代码中的

setTimeout与外部不同(MDN上的更多信息),因此您的代码实际上是在计算undefined++,{{1} }}

你必须创建另一个变量,并将一个函数传递给setTimeout而不是让它eval一个字符串(顺便说一句,传递函数应该更快,看起来更好):

NaN

答案 1 :(得分:3)

我知道这是一个有5年历史的问题了,但是它是2018年提出的,这里是一种Es6语法解决方案,可以避免绑定关键字+的额外步骤。

this