/
Вопросы и ответы
/
JavaScript
/

как передать правильный контекст в settimeout на примере javascript

как передать правильный контекст в settimeout на примере javascript

2 года назад

Nikolai Gagarinov

Ответы

1

Проблема часто возникает, когда используется this внутри функции, которая передается в setTimeout. При этом контекст выполнения функции setTimeout() отличается от контекста выполнения переданной функции. В результате this уже не ссылается на ожидаемый объект или элемент.

Для передачи правильного контекста в setTimeout() есть несколько способов:

1. Использование стрелочных функций:

class Timer {
  constructor() {
    this.seconds = 0;
  }

  start() {
    setTimeout(() => {
      this.seconds++;
      console.log(this.seconds);
    }, 1000);
  }
}

const timer = new Timer();
timer.start();

2. Использование метода bind:

class Timer {
  constructor() {
    this.seconds = 0;
  }

  increment() {
    this.seconds++;
    console.log(this.seconds);
  }

  start() {
    setTimeout(this.increment.bind(this), 1000);
  }
}

const timer = new Timer();
timer.start();

3. Использование замыканий:

class Timer {
  constructor() {
    this.seconds = 0;
  }

  start() {
    const that = this;
    function increment() {
      that.seconds++;
      console.log(that.seconds);
    }

    setTimeout(increment, 1000);
  }
}

const timer = new Timer();
timer.start();

Какой из способов использовать, зависит от вашего стиля кодирования и предпочтения. Однако, стрелочные функции стали предпочтительным способом в современном коде JavaScript, так как они автоматически захватывают контекст выполнения.

год назад

Maksim Litvinov

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845