Метод bind привязать контекст к функции. Метод первым параметром получает необходимый контекст, а последующие параметры - это первые параметры функции. Метод возвращает новую функцию, внутри которой this будет равным переданному контексту.

В отличии от call/apply функция не выполняется сразу. А лишь возвращается новая функция, которую можно вызвать в любой момент.

См. также this (рекомендуется до прочтения статьи), apply, call.

Синтаксис

функция.bind(контекст, параметр1, параметр2, ..., параметр n);

Примеры

Пример

Скопируем функции user.sayHi в переменную, а затем установим user в качестве контекста:

var user = {
	name: 'Андрей',
	sayHi: function() {
		document.write('Привет. Меня зовут ' + this.name);
	}
}

var sayHi = user.sayHi.bind(user);
sayHi();

Как было написано в статье про this при следующем варианте был бы потерян контекст:

var sayHi = user.sayHi;
sayHi();

Но благодаря bind контекст больше не теряется.

Результат выполнения кода:

Привет. Меня зовут Андрей

Пример

Также в статье про this рассматривалась проблема потери контекста при вложенных функциях. Для решения этой проблемы использовалась дополнительная переменная self. Здесь же воспользуется методом bind:

var user = {
	name: 'Андрей',
	sayHi: function() {
		setTimeout(function() {
			alert('Привет. Меня зовут ' + this.name);
		}.bind(this), 2000);
	}
}

user.sayHi();

Результат выполнения кода:

Пример

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

var user = {
	name: 'Андрей',
	sayHi: function() {
		alert('Привет. Меня зовут ' + this.name);
	}
}

setTimeout(user.sayHi.bind(user), 2000);

Если бы мы просто написали setTimeout(user.sayHi, 2000), то была бы ошибка.

Результат выполнения кода: