Прежде всего, хотелось бы уточнить, что эти функции можно использовать только в обычных функциях, а не в стрелочных функциях, поскольку оператор this в каждом случае ведет себя по-разному.
С этим уточнением давайте начнем:
Apply и call используются одинаково. Они оба выполняют функцию в контексте или области действия первого передаваемого нами аргумента. Эти функции можно вызывать только для других функций.
Пример вызова:
function sum(a, b) { console.log(this.num + a + b); } const obj1 = { num: 2}; const obj2 = { num: 3}; sum.call(obj1, 1, 5); // output --> 8 sum.call(obj2, 1, 5); // output --> 9
Пример применить:
function sum(a, b) { console.log(this.num + a + b); } const obj1 = { num: 2}; const obj2 = { num: 3}; sum.apply(obj1, [1, 5]); // output --> 8 sum.apply(obj2, [1, 5]); // output --> 9
Привязка:
Bind может использоваться любой функцией. Он возвращает связанную функцию с соответствующим контекстом «this» для вызова исходной функции в более позднее время. Привязка полезна, когда функцию необходимо вызвать позже, особенно в определенных событиях.
Пример:
function sum(a, b) { console.log(this.num + a + b); } const obj1 = { num: 25 }; const obj2 = { num: 50 }; const obj1Sum = sum.bind(obj1); const obj2Sum = sum.bind(obj2, 2, 3); obj1Sum(2, 3); // output --> 30 obj2Sum(); // output --> 55
Надеюсь, это краткое объяснение окажется для вас полезным. Примеры довольно просты, но я считаю, что они достаточно ясны, чтобы уловить эти три концепции.
В настоящее время эти функции не получили широкого распространения, но вы можете найти их в любом коде, где в дальнейшем будете работать с устаревшим кодом. Например, если вы используете библиотеку с именем «Bluebird», весьма вероятно, что вам придется использовать функцию «bind».