Почему он отображается как неопределенный / NaN? - PullRequest
0 голосов
/ 12 апреля 2019

initialSpeed ​​не обновляется, сначала отображается как неопределенное, а затем как 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 () на всякий случай, но не сработало.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Вам необходимо привязать контекст к методу интервального обратного вызова, чтобы сохранить контекст класса. Поэтому вместо звонка 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();
1 голос
/ 12 апреля 2019

Переместите функцию запуска за пределы класса транспорта и передайте объект автомобиля следующим образом:

class Transportation {
   kind: string;
   speed: number;
   initialSpeed: number = 0;

   constructor(kind: string, initialSpeed:number, speed:number) {
     this.kind = kind;
     this.speed = speed;
     this.initialSpeed = initialSpeed
   } 

    calcSpeed(car: Transportation) {   
      console.log("initial speed: ", car.initialSpeed);     
      car.initialSpeed += car.speed    
    }

}

function start(car: Transportation) {
  let begin = setInterval(car.calcSpeed, 1000, car);
}

let car = new Transportation("car", 0 , 50);
console.log(car);
start(car);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...