Function.prototype.bind
Создаёт копию функции с закреплённым this и, при желании, аргументами.
Доступно с: ES5
Синтаксис
fn.bind(thisArg, ...args)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| thisArg | any | Значение this для новой функции. |
| ...args | any | Необязательные. Аргументы, которые будут подставлены заранее. |
Возвращаемое значение
FunctionНовая функция с привязанным this и аргументами.
Примеры
Метод теряет this, если передать его отдельно:
class User {
constructor(name) {
this.name = name;
}
greet() {
return `Hi, ${this.name}`;
}
}
const anna = new User('Anna');
const lost = anna.greet;
const bound = anna.greet.bind(anna);
try {
lost();
} catch (error) {
console.log(error.name);
}
console.log(bound());Результат:
TypeError
Hi, AnnaЧастичное применение — закрепить первый аргумент:
const multiply = (a, b) => a * b;
const triple = multiply.bind(null, 3);
console.log(triple(5));Результат:
15Примечания
Самый частый случай — передача метода в обработчик события или таймер. Часто вместо bind() пишут стрелочную функцию: () => user.greet().
См. также
- Function.prototype.call — Вызывает функцию с указанным this и аргументами.
- Function.prototype.apply — Вызывает функцию с указанным this и массивом аргументов.
- Arrow function (=>) — Короткая запись функции.
В учебнике
- this, call, apply и bind — Как в JavaScript определяется this, почему метод теряет контекст и как задать this вручную методами call, apply и bind.