initialSpeed 未更新,它首先显示为 undefined,后来显示为 NaN。
start() 和 calcSpeed() 方法在类外时工作得非常好。
class Transportation {
kind: string;
speed: number;
initialSpeed: number = 0;
constructor(kind: string, speed:number) {
this.kind = kind;
this.speed = speed;
}
start() {
let begin = setInterval(this.calcSpeed, 1000);
}
calcSpeed() {
console.log("initial speed: ", this.initialSpeed);
return this.initialSpeed = this.speed + this.initialSpeed;
}
}
let car = new Transportation("car", 50);
console.log(car);
car.start();
它应该显示 0 并且每秒增加 50。 相反,它显示未定义,并且此后的每一秒都显示为 NaN。
我尝试过 Number() 和 toString() 以防万一,但没有成功。
最佳答案
您需要将上下文绑定(bind)到间隔回调方法以保留类上下文。
因此,不要调用 setInterval(this.calcSpeed, 1000);
,而是调用 setInterval(this.calcSpeed.bind(this), 1000);
class Transportation {
kind: string;
speed: number;
initialSpeed: number = 0;
constructor(kind: string, speed:number) {
this.kind = kind;
this.speed = speed;
}
start() {
let begin = setInterval(this.calcSpeed.bind(this), 1000);
}
calcSpeed() {
console.log("initial speed: ", this.initialSpeed);
return this.initialSpeed = this.speed + this.initialSpeed;
}
}
let car = new Transportation("car", 50);
console.log(car);
car.start();
关于javascript - 为什么它显示为未定义/NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55651609/