JS: Прототипы
Теория: Позднее связывание
В этом уроке разбираем позднее связывание. Это центральная идея объектной модели, и в JavaScript она напрямую связана с this.
Коротко: this определяется не там, где функция объявлена, а там, где она вызвана.
Базовый пример
Метод вызван как obj.getName(), поэтому this внутри метода указывает на obj.
Почему тот же код может упасть
Здесь вызов идет без объекта слева от точки. Контекст потерян, this больше не связан с obj.
Это одна из самых частых ошибок в JS-коде.
Позднее связывание на практике
Одна и та же функция может работать с разными объектами, если вызывать ее в разном контексте:
Функция одна, но результат разный, потому что this подставляется в момент вызова.
Стрелочные функции и this
У стрелочных функций нет собственного this. Они берут его из внешнего окружения.
Поэтому такой код часто ведет себя не так, как ожидают:
Здесь this не становится "объектом метода", и вызов обычно приводит к ошибке или неожиданному значению.
Связь с наследованием
Когда в псевдоклассическом стиле делают Parent.apply(this, args), мы тоже опираемся на механизм позднего связывания: вручную задаем контекст, в котором выполнится функция-конструктор родителя.
Итоги
В JavaScript полезно мысленно читать this как "контекст вызова".
Это простое переименование сильно снижает количество ошибок и делает предсказуемыми случаи, где методы передают как колбэки или сохраняют в переменные.