编写一些代码,在创建类的实例时,我所拥有的整数变量会发生奇怪的事情:
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)。
为什么会这样,有没有我没有看到的解决方案?
答案 0 :(得分:3)
this
代码中的 setTimeout
与外部不同(MDN上的更多信息),因此您的代码实际上是在计算undefined++
,{{1} }}
你必须创建另一个变量,并将一个函数传递给setTimeout而不是让它eval一个字符串(顺便说一句,传递函数应该更快,看起来更好):
NaN
答案 1 :(得分:3)
我知道这是一个有5年历史的问题了,但是它是2018年提出的,这里是一种Es6语法解决方案,可以避免绑定关键字+
的额外步骤。
this