Devs Hive
Повернутися до всіх запитань

Розкажи про методи call, apply і bind

JuniorMiddleJavaScript
Зустрічали на інтервʼю:0 користувачів

Це питання доволі часто зустрічається на інтервʼю. Воно може звучати саме так як в назві, а може бути поставлене так: "Чи можемо ми змінювати this?" І тут потрібно буде відповісти, що так, можемо і для цього в JS існують такі вбудовані методи як call, apply і bind.

Усі три методи роблять одне й те саме - вони дозволяють явно вказати, яким буде this усередині функції. Тобто, простими словами, ми самі кажемо функції, з яким об’єктом вона має працювати.

Різниця між ними полягає в наступному:

  1. У способі передачі аргументів
  2. У тому, чи викликається функція одразу

Наприклад, метод call - буде приймати аргументи через кому і викликати функцію одразу. Тут ми явно вказуємо, що this всередині greet буде об’єкт { title: "Hello" }.

Метод apply, робить теж саме, що і call - функція викликається одразу, а аргументи передаються у вигляді масиву.

function greet(name) {
console.log(this.title + " " + name);
}

greet.call({ title: "Hello" }, "John");

greet.apply({ title: "Hello" }, ["John"]);

Метод bind, навідміну від попередніх, не викликає цю функцію одразу, а повертає нову функцію, у якої вже є this. Стосовно аргументів, вони передаються через кому, але в новій функції. Його зазвичай використовують, коли потрібно передати функцію кудись далі, але зберегти правильний this.

const boundGreet = greet.bind({ title: "Hello" });

boundGreet("John");

Гарною практикою буде додати, що метод bind є реалізацією підходу часткового використання, який в свою є основою для такої техніки як Currying.

Зустрічав на інтервʼю?

Коментарі (0)

Увійдіть, щоб залишити коментар

Поки що немає коментарів. Будьте першим!