Ответ
call, apply и bind — это методы в JavaScript для управления контекстом выполнения функции, то есть значением this.
call()немедленно вызывает функцию с заданным контекстомthisи отдельными аргументами.func.call(thisContext, arg1, arg2, ...);apply()аналогиченcall(), но принимает аргументы в виде массива (или массивоподобного объекта).func.apply(thisContext, [arg1, arg2, ...]);bind()не вызывает функцию сразу. Он создаёт и возвращает новую функцию с навсегда привязанным контекстомthis. Аргументы могут быть частично применены.const boundFunc = func.bind(thisContext, arg1); boundFunc(arg2); // Вызов позже
Ключевые отличия:
- Момент вызова:
callиapplyвызывают функцию немедленно.bindвозвращает новую, связанную функцию для вызова позже. - Формат аргументов:
callпринимает список аргументов,apply— массив.
Пример использования:
const userProfile = { name: 'Анна' };
function showMessage(greeting, punctuation) {
console.log(`${greeting}, ${this.name}${punctuation}`);
}
// call
showMessage.call(userProfile, 'Привет', '!'); // Привет, Анна!
// apply
showMessage.apply(userProfile, ['Здравствуйте', '.']); // Здравствуйте, Анна.
// bind
const greetUser = showMessage.bind(userProfile, 'Добрый день');
greetUser('!'); // Добрый день, Анна!
В контексте тестирования (например, при юнит-тестировании с использованием Jest или Mocha) эти методы могут применяться для изоляции и тестирования функций, которые зависят от конкретного контекста this, позволяя подменять его на mock- или stub-объекты.