В JavaScript методы call, apply и bind используются для изменения контекста функции или для установки значения this внутри функции. Они обычно используются в ситуациях, когда вам нужно передать функцию в качестве обратного вызова или когда вы хотите повторно использовать функцию с разными контекстами или аргументами.

Вот несколько примеров и случаев использования для каждого метода:

  1. Позвонить

Метод call позволяет вызывать функцию с указанным значением this и аргументами, предоставленными индивидуально.

Пример:

const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}

const person1 = {
  firstName: "John",
  lastName: "Doe"
}

const person2 = {
  firstName: "Mary",
  lastName: "Smith"
}

console.log(person.fullName.call(person1)); // Output: "John Doe"
console.log(person.fullName.call(person2)); // Output: "Mary Smith"

В приведенном выше примере метод call используется для вызова функции fullName с person1 и person2 в качестве значения this.

Вариант использования:

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

2. Применить

Метод apply похож на call, но он принимает массив аргументов вместо аргументов, предоставляемых по отдельности.

Пример:

const numbers = [5, 6, 2, 3, 7];

const max = Math.max.apply(null, numbers);

console.log(max); // Output: 7

В приведенном выше примере метод apply используется для поиска максимального значения в массиве чисел.

Вариант использования:

apply можно использовать для вызова функции с массивом аргументов, что полезно, когда у вас есть функция, которая принимает переменное количество аргументов. Например, у вас может быть функция, которая принимает произвольное количество аргументов, и вы хотите вызвать ее с массивом аргументов.

3.Привязать

Метод bind возвращает новую функцию с указанным значением this и аргументами.

Пример:

const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}

const person1 = {
  firstName: "John",
  lastName: "Doe"
}

const person2 = {
  firstName: "Mary",
  lastName: "Smith"
}

const fullName1 = person.fullName.bind(person1);
const fullName2 = person.fullName.bind(person2);

console.log(fullName1()); // Output: "John Doe"
console.log(fullName2()); // Output: "Mary Smith"

В приведенном выше примере метод bind используется для создания двух новых функций fullName1 и fullName2, привязанных к person1 и person2 соответственно.

Вариант использования:

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