setInterval внутри класса для создания игровых часов - PullRequest
0 голосов
/ 02 ноября 2019

В настоящее время я пытаюсь создать «игровые» часы, так сказать, для приложения, которое я создаю. Я хотел создать класс Time и добавить setInterval (), чтобы увеличить время атрибута секунд для проверки


class Time {
    constructor() {
        this.seconds = 0;
        this.countTime = setInterval(this.increaseTime, 1000)
    }

    increaseTime() {
        this.time++
        console.log(this.seconds)
    }

}

let time = new Time();

Я ожидал, что моя функция увеличит this.secondsсвойство с функцией setInterval, которое я прошел. Вместо этого в консоли он печатал NaN каждую секунду. Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 02 ноября 2019

Это потому, что setInterval выполняет обратный вызов в глобальном контексте, и это не указывает на класс. Вы можете привязать это к этой переменной в лексической области или использовать функции стрелок.

  class Time {
    constructor() {
        this.seconds = 0;
        this.countTime = setInterval(this.increaseTime.bind(this), 1000)
    }

    increaseTime() {
        this.seconds++
        console.log(this.seconds)
    }

}

let time = new Time();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...