Как можно работать с контекстом в JS?
Объекты и прототипы
С контекстом (`this`) работают через: методы объектов (this = объект), `call`/`apply`/`bind` (явная привязка), стрелочные функции (лексический this), `new` (новый объект), поля класса.
Способы работы с контекстом
Методы объекта
this = объект слева от точки:
const obj = {
name: 'Ann',
greet() { return this.name; }, // this = obj
};
obj.greet();call / apply — вызвать с заданным this
fn.call(obj, arg1, arg2); // аргументы списком
fn.apply(obj, [arg1, arg2]); // аргументы массивомbind — зафиксировать this
const bound = fn.bind(obj); // новая функция с this = objСтрелочные функции — лексический this
Берут this из окружения (для колбэков, чтобы не терять контекст):
setTimeout(() => this.method(), 100); // this сохранёнnew — новый объект
new Constructor(); // this = новый экземплярПоля класса со стрелками
Фиксируют this для обработчиков:
class Btn { handleClick = () => this; } // this = экземплярЧастые задачи
- Не терять контекст в колбэках →
bindили стрелка. - Заимствовать метод →
call/apply. - Фиксировать this →
bind, стрелка, поле класса.
Коротко для собеседования
С контекстом работают: методы объекта (this = объект), call/apply (вызвать с заданным this, аргументы списком/массивом), bind (зафиксировать this), стрелки (лексический this из окружения — для колбэков), new (новый объект), поля класса со стрелками (фиксированный this для обработчиков). Основные задачи — не терять и фиксировать контекст.