
Методы call, apply и bind являются методами функции в JavaScript и позволяют управлять контекстом выполнения функции, т.е. значением this.
Метод call позволяет вызывать функцию с явно заданным контекстом выполнения и передавать аргументы в виде отдельных значений. Первый аргумент метода call устанавливает значение this, а последующие аргументы передаются в вызываемую функцию. Например:
const person = {
firstName: "John",
lastName: "Doe",
getFullName: function () {
return this.firstName + " " + this.lastName
},
}
const person2 = {
firstName: "Jane",
lastName: "Doe",
}
console.log(person.getFullName.call(person2)) // 'Jane Doe'Метод apply работает аналогично методу call, но принимает аргументы в виде массива. Первый аргумент метода apply устанавливает значение this, а второй аргумент должен быть массивом аргументов, которые будут переданы в вызываемую функцию. Например:
const numbers = [1, 2, 3, 4, 5]
const sum = function () {
return this.reduce(function (acc, val) {
return acc + val
}, 0)
}
console.log(sum.apply(numbers)) // 15Метод bind позволяет создать новую функцию с жестко привязанным контекстом выполнения (значением this). Метод bind() возвращает новую функцию с привязанным контекстом. Эта новая функция может быть вызвана позже с любым количеством аргументов. Например:
const person = {
firstName: "John",
lastName: "Doe",
getFullName: function () {
return this.firstName + " " + this.lastName
},
}
const logFullName = function () {
console.log(this.getFullName())
}
const boundLogFullName = logFullName.bind(person)
boundLogFullName() // 'John Doe'Основное отличие между call и apply заключается в том, как аргументы передаются в вызываемую функцию (в виде отдельных значений или массива соответственно), а bind создает новую функцию с жестко привязанным контекстом, которая может быть вызвана позже. При использовании этих методов важно помнить, что call и apply вызывают функцию немедленно, в то время как bind создает новую функцию, которая может быть вызвана позже.