Вызов, привязка и применение — это три метода, которые доступны во всех функциях JavaScript. Эти методы позволяют вам установить значение this внутри функции, что полезно для создания повторно используемых функций, которые можно использовать в разных контекстах.

Метод apply() похож на call(), но он принимает аргументы для передачи функции в виде массива, а не перечисляет их по отдельности. Это может быть полезно, когда аргументы неизвестны заранее или когда они хранятся в массиве. Вот пример:

const user = { name: 'John Doe' };

function sayHello(greeting) {
  console.log(`${greeting}, my name is ${this.name}.`);
}

const greetings = ['Hello', 'Hi', 'Hola'];
sayHello.apply(user, greetings);  // Output: "Hello, my name is John Doe."

Метод bind() работает аналогично call(), но вместо немедленного вызова функции он создает новую функцию с указанным значением для this. Это позволяет вам создать новую функцию, которую можно вызвать позже с другим значением для this, если это необходимо. Вот пример:

const user = { name: 'John Doe' };

function sayHello(greeting) {
  console.log(`${greeting}, my name is ${this.name}.`);
}

const sayHelloToUser = sayHello.bind(user, 'Hello');
sayHelloToUser();  // Output: "Hello, my name is John Doe."

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

const user = { name: 'John Doe' };

function sayHello(greeting) {
  console.log(`${greeting}, my name is ${this.name}.`);
}

sayHello.call(user, 'Hello');  // Output: "Hello, my name is John Doe."

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

Если вам понравилась эта статья, не забудьте поставить лайк и подписаться!