В JavaScript методы call
, apply
и bind
используются для изменения контекста функции или для установки значения this
внутри функции. Они обычно используются в ситуациях, когда вам нужно передать функцию в качестве обратного вызова или когда вы хотите повторно использовать функцию с разными контекстами или аргументами.
Вот несколько примеров и случаев использования для каждого метода:
- Позвонить
Метод 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
можно использовать для создания новой функции, привязанной к определенному контексту. Это полезно, когда у вас есть функция, которую нужно вызывать в определенном контексте, но вы не хотите изменять исходную функцию. Например, у вас может быть функция, которая используется в нескольких контекстах, и вы хотите создать новую функцию для каждого контекста.