Javascript 添加时返回为NaN的整数
在编写一些代码时,当创建一个类的实例时,一个整数变量发生了一些奇怪的事情:Javascript 添加时返回为NaN的整数,javascript,timer,setinterval,nan,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++; con
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)
这是为什么?有没有我没有看到的解决方案?
此
内部的设置超时
代码与外部的不一样(更多信息),因此您的代码实际上是在计算未定义的++
,即NaN
您必须创建另一个变量,并将函数传递给setTimeout,而不是让它计算字符串(顺便说一句,传递函数应该更快,而且看起来更好):
我知道这是一个5年前的问题,但它是2018年的问题,这里有一个Es6语法解决方案,以避免绑定关键字
this
的额外步骤
this.spawnTimer = setInterval(() => {
this.bornTime++;
console.log(this.bornTime);
}, 1000);
查看下面我的答案,了解es6 arrow函数的用法,它在javascript中解决了这个问题,并避免了额外的代码行。:)
this.spawnTimer = setInterval(() => {
this.bornTime++;
console.log(this.bornTime);
}, 1000);