
Потеря «this»
При передаче методов объекта в качестве колбэков, например для
Как только метод передаётся отдельно от объекта –
На картинке выше, При запуске этого кода мы видим, что вызов
Это произошло потому, что
Метод
Таким образом, для
В других подобных случаях
#потеря_this #функции
При передаче методов объекта в качестве колбэков, например для
setTimeout
, возникает известная проблема – потеря this
.Как только метод передаётся отдельно от объекта –
this
теряется.На картинке выше, При запуске этого кода мы видим, что вызов
this.firstName
возвращает не «Вася
», а undefined
!Это произошло потому, что
setTimeout
получил функцию sayHi
отдельно от объекта user
(именно здесь функция и потеряла контекст).Метод
setTimeout
в браузере имеет особенность: он устанавливает this=window
для вызова функции. Таким образом, для
this.firstName
он пытается получить window.firstName
, которого не существует.В других подобных случаях
this
обычно просто становится undefined
.#потеря_this #функции