this и контекст
this задаёт вызов. Стрелка и bind из этого правила выпадают.
У обычной функции this определяется не тем, где она написана, а тем, как её вызвали. Четыре формы вызова дают четыре разных результата:
obj.method()—thisэтоobj.- Вызов без точки —
thisтеряется:undefinedв strict-режиме, глобальный объект без него. callиapplyподставляютthisна один вызов,applyдополнительно раскладывает массив в аргументы.bindвозвращает новую функцию с уже зафиксированнымthis.
Два следствия, на которых чаще всего спотыкаются. Метод, вынутый из объекта и переданный колбэком, теряет объект — он вызывается без точки. И повторный bind первый не перебивает: inner уже зафиксирован, второй bind ничего не меняет.
Стрелка не имеет своего `this`
Стрелка берёт this снаружи, из места, где написана, даже если её вызвали как метод. Поэтому она удобна для колбэков внутри метода и не годится там, где нужен собственный this.
`new`
new создаёт объект, связывает его с this и с prototype функции. Если конструктор вернул примитив, он игнорируется и результатом остаётся созданный объект.
- 3.1Метод, оторванный от объекта
- 3.2Стрелка не имеет своего this
- 3.3Повторный bind и отдельный call
- 3.4new связывает this и прототип
- 3.5Колбэк setTimeout: функция против стрелки
- 3.6forEach внутри метода
- 3.7Метод уехал в map без хозяина
- 3.8bind каррирует аргументы
- 3.9apply, call со spread и обычный вызов
- 3.10Геттер и потерянный this
- 3.11Метод класса через обёртку
- 3.12Стрелка и обычная функция рядом в методе
- 3.13Конструктор вернул объект
- 3.14IIFE: свой strict внутри нестрогого файла
- 3.15Reflect.apply и строгая функция
- 3.16bind не спасает от new
- 3.17Примитив в call упаковывается в объект
Задачи из сборки