Основная концепция, стоящая за всеми этими методами, — закапывание функций.

Традиционно один объект имеет собственный набор свойств и методов, который связан только с самим собой, и вы не можете использовать методы obj1 для obj2.

Но заимствование функций позволяет нам использовать методы одного объекта для другого объекта без необходимости создавать копию этого метода и поддерживать его в двух разных местах.

Это достигается за счет использования .call(), .apply() или . bind() , все из которых существуют для явного задания this в методе, который мы заимствуем
Подробнее об this можно прочитать в Link

  1. Call немедленно вызывает функцию и позволяет передавать аргументы один за другим.
  2. Применить немедленно вызывает функцию, позволяя передавать аргументы в виде массива.
  3. 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