javascript - 为什么它显示为未定义/NaN?

标签 javascript typescript class oop

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/

相关文章:

javascript - 如何使用带参数的函数添加和删除事件监听器?

c++ - 2 个头文件中的 2 个类

c++ - 类型定义类

C++基础类

javascript - 如何为 <input> 的智能手机禁用 'save image as' 弹出窗口

javascript - CSS :after on ie7, jquery 模式

javascript - Angular 中的 ng-switch 与父子 Controller

typescript - typescript : 接口(interface)中多个类型的精确值

node.js - vscode 无法启动 Node 应用程序

typescript noImplicitAny 和 noImplicitReturns 没有按预期工作