Проверяет понимание способов управления контекстом this в JavaScript, что важно для работы с функциями и объектами.
В JavaScript контекст функции — это значение переменной this внутри неё. Оно определяется тем, как функция вызывается, а не где она объявлена. Понимание контекста критично для работы с методами объектов, обработчиками событий и функциями-конструкторами.
Существует три основных метода для явного управления контекстом: call, apply и bind. Все они доступны у любой функции.
call(thisArg, arg1, arg2, ...) — вызывает функцию с указанным this и перечисленными аргументами.apply(thisArg, [argsArray]) — аналогичен call, но аргументы передаются массивом.bind(thisArg) — возвращает новую функцию, у которой this навсегда привязан к указанному объекту, без немедленного вызова.const user = {
name: 'Alice',
greet() {
console.log(`Hello, ${this.name}`);
}
};
const anotherUser = { name: 'Bob' };
user.greet(); // Hello, Alice
user.greet.call(anotherUser); // Hello, Bob
user.greet.apply(anotherUser); // Hello, Bob
const boundGreet = user.greet.bind(anotherUser);
boundGreet(); // Hello, Bob
В примере call и apply сразу вызывают функцию с новым контекстом, а bind создаёт новую функцию, которую можно вызвать позже.
Эти методы часто используются при работе с событиями, когда нужно передать метод объекта как обработчик, сохраняя контекст. Также они полезны при заимствовании методов у других объектов, например, Array.prototype.slice.call(arguments) для преобразования псевдомассива в массив.
Итог: Используйте call и apply для немедленного вызова с нужным контекстом, а bind — когда нужно создать функцию с заранее заданным this для последующего использования.