0

На звание знатока JS не претендую. При разработке учебного проекта сталкнулся с непонятной ситуацией. Когда я запуска через setInterval метод экземпляра класса получаю сообщение

"this.snakeBody is undefined"

Пример запуска setInterval(snake.move, 500);

А если обернуть вызов метода в функцию то всё работает (пример запуска

setInterval(function() {
  snake.move();
}, 500);

Собственно говоря хочу понять, почему не работает вызов метода без обёртки.

На всякий случай ссылка на песочницу: https://plnkr.co/edit/xnhafbsDVaZXp9D7CQLS

строка описания запуска - 146

ThisMan
  • 12,261
Andy
  • 3
  • типичная ошибка с потерей контекста, на это уже есть несколько вопросов с ответами – ThisMan Jun 10 '19 at 10:56
  • внутри setintervel теряется контекст this. тут можно или заменить функцию на стрелочную или делать как у тебя в примере. а так же посмотри bind, call, apply - там подробно расписано – Сергей Петрашко Jun 10 '19 at 10:56

1 Answers1

1

Во-первых, метода класса неправильно вызван:

setInterval(snake.move(), 500)

Но запись выше будет вызвана один раз при запуске setInterval при каждом нажатии кнопки. Поэтому смотрите ниже.

Во-вторых, setInterval в качестве первого аргумента должен получать функцию, которая запустит то, что Вам необходимо внутри себя с конкретным интервалом:

setInterval(() => snake.move(), 500)

Daniyal Lukmanov
  • 533
  • 3
  • 15