До этой главы this определялся автоматически — исходя из того, как выглядит вызов: с точкой, без точки, через new. Здесь — принципиально другой подход: контекст задаёт сам программист, передавая нужный объект первым аргументом. Функция получает свой this не «случайно», как побочный эффект синтаксиса, а через явный контракт.
Инструменты для этого — методы .call() и .apply(), доступные любой функции через прототип Function.prototype. Оба делают одно и то же (запускают функцию с явно указанным this), отличаясь только формой передачи аргументов.
Что в этой главе
Одна подглава: this в непрямом вызове — разбор синтаксиса .call() и .apply(), разница между ними, практические use cases: заимствование методов у чужих объектов, работа с псевдо-массивами вроде arguments, полифилы утилит.
Непрямой вызов — более редкий сценарий в новом коде, но встречается регулярно в двух ситуациях: (1) когда нужно вызвать метод одного объекта в контексте другого без создания копии, (2) когда работаешь с legacy-кодом или library-utilities, использующими Function.prototype.call напрямую (например, Object.prototype.hasOwnProperty.call(obj, key) — безопасная проверка свойства).