Основная концепция, стоящая за всеми этими методами, — закапывание функций.
Традиционно один объект имеет собственный набор свойств и методов, который связан только с самим собой, и вы не можете использовать методы obj1 для obj2.
Но заимствование функций позволяет нам использовать методы одного объекта для другого объекта без необходимости создавать копию этого метода и поддерживать его в двух разных местах.
Это достигается за счет использования .call(), .apply() или . bind() , все из которых существуют для явного задания this в методе, который мы заимствуем
Подробнее об this можно прочитать в Link
- Call немедленно вызывает функцию и позволяет передавать аргументы один за другим.
- Применить немедленно вызывает функцию, позволяя передавать аргументы в виде массива.
- Bind возвращает новую функцию; вы можете вызвать/вызвать его в любое время, вызвав функцию.
Ниже приведены примеры всех этих методов
let name = { firstname : "Arham", lastname : "Chowdhury", } printFullName = function(hometown,company){ console.log(this.firstname + " " + this.lastname +", " + hometown + ", " + company) }
ЗВОНИТЕ
первый аргумент, например, имя внутри метода вызова, всегда является ссылкой на (эту) переменную, а последний будет переменной функции
printFullName.call(name,"Mumbai","Taufa"); //Arham Chowdhury, Mumbai, Taufa
ПРИМЕНИТЬ
метод применения аналогичен методу вызова, единственное отличие состоит в том, что аргументы функции передаются в списке массивов
printFullName.apply(name, ["Mumbai","Taufa"]); //Arham Chowdhury, Mumbai, Taufa
СВЯЗАТЬ
метод привязки аналогичен вызову, за исключением того, что привязка возвращает функцию, которую можно использовать позже, вызвав ее (не вызывает ее немедленно)
let printMyNAme = printFullName.bind(name,"Mumbai","Taufa");ja printMyNAme(); //Arham Chowdhury, Mumbai, TaufaprintMyNAme() is the function that invokes the function
https://codepen.io/Arham11/pen/vYNqExp
Другой пример привязки:
const multiply = (x, y) => { return x * y } const multiplyByTwo = multiply.bind(this, 2) // the argument 2 is x in burrowed function multiplyByTwo(4) // argument 4 is y in burrowed function returns 4*2 =8 multiplyByTwo(11) // 22
Сопроводительные документы:
https://www.geeksforgeeks.org/explain-call-apply-and-bind-methods-in-javascript/
https://developer.mozilla.org/ en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind