call vs apply
Коротко:
| Метод | Як передаються аргументи | Приклад виклику |
|---|---|---|
call | перелічуються через кому | func.call(thisArg, arg1, arg2, arg3) |
apply | передаються у вигляді масиву | func.apply(thisArg, [arg1, arg2, arg3]) |
Приклад для наочності
javascript
function greet(city, job) {
console.log(`Я ${this.name} з ${city}, працюю як ${job}`);
}
const user = { name: 'Богдан' };
// call - аргументи через кому
greet.call(user, 'Київ', 'Frontend-розробник');
// apply - аргументи масивом
greet.apply(user, ['Київ', 'Frontend-розробник']);Обидва виклики виведуть:
javascript
Я Богдан з Київ, працюю як Frontend-розробникКоли використовувати який
| Сценарій | Краще використовувати |
|---|---|
| Аргументи заздалегідь відомі | call |
| Аргументи вже знаходяться в масиві | apply |
Приклад: масив аргументів
javascript
function sum(a, b, c) {
return a + b + c;
}
const nums = [1, 2, 3];
// Без apply - довелося б писати вручну
console.log(sum.call(null, nums[0], nums[1], nums[2]));
// З apply - просто передаємо масив
console.log(sum.apply(null, nums)); // 6Сучасний аналог зі Spread
У сучасних версіях JS (ES6+) apply часто замінюють оператором spread:
javascript
const nums = [1, 2, 3];
console.log(sum(...nums)); // той самий результат, що і sum.apply(null, nums)Підсумок
| Властивість | call | apply |
|---|---|---|
Контекст (this) | Явно вказується першим аргументом | Те саме |
| Передача аргументів | Через кому | Масивом |
| Повертає | Результат функції | Результат функції |
| Викликає одразу | так | так |
| Сучасна альтернатива | Spread: func(...args) | Spread: func(...args) |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.