Поведение setInterval для экземпляра класса [дубликат]

139
05 февраля 2021, 06:20
На этот вопрос уже даны ответы здесь:
Потеря контекста вызова (5 ответов)
Закрыт 1 год назад.

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

"this.snakeBody is undefined"

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

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

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

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

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

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

Answer 1

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

setInterval(snake.move(), 500)

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

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

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

READ ALSO
Cannot read property of undefined NodeJs React

Cannot read property of undefined NodeJs React

Имеется серверная часть на NodeJs и клиентская на ReactСо стороны сервера использую /api, где передаю полученные данные из mysql:

138
Рендер JS вьюхи для AJAX Rails

Рендер JS вьюхи для AJAX Rails

У меня есть showhtml

102
Как сделать прокрутку div на jquery?

Как сделать прокрутку div на jquery?

я по нажатию на один блок div, динамически создаю текстовый блок в котором сообщения, и соответственно есть прокрутка! как сделать чтоб этот...

83
Как получить картинку из input в electronjs

Как получить картинку из input в electronjs

Я почти не работал с nodejs а тем более с electronjsПоэтому не понимаю как происходит передача файлов

95