Bind erstellt eine neue Funktion, die erzwingt, dass das thisInnere der Funktion der Parameter ist, an den übergeben wird bind().
Hier ist ein Beispiel, das zeigt, wie bindeine Member-Methode übergeben wird, die das Richtige hat this:
var myButton = {
content: 'OK',
click() {
console.log(this.content + ' clicked');
}
};
myButton.click();
var looseClick = myButton.click;
looseClick(); // not bound, 'this' is not myButton - it is the globalThis
var boundClick = myButton.click.bind(myButton);
boundClick(); // bound, 'this' is myButton
Welches druckt aus:
OK clicked
undefined clicked
OK clicked
Sie können auch zusätzliche Parameter nach dem Parameter 1st ( this) hinzufügen und binddiese Werte an die ursprüngliche Funktion übergeben. Alle zusätzlichen Parameter, die Sie später an die gebundene Funktion übergeben, werden nach den gebundenen Parametern übergeben:
// Example showing binding some parameters
var sum = function(a, b) {
return a + b;
};
var add5 = sum.bind(null, 5);
console.log(add5(10));
Welches druckt aus:
15
Weitere Informationen und interaktive Beispiele finden Sie unter JavaScript-Funktionsbindung .
Update: ECMAScript 2015 bietet Unterstützung für =>Funktionen. =>Funktionen sind kompakter und ändern den thisZeiger nicht von ihrem definierten Bereich, sodass Sie ihn möglicherweise nicht bind()so oft verwenden müssen. Wenn Sie beispielsweise eine Funktion Buttonaus dem ersten Beispiel aktivieren clickmöchten, um den Rückruf mit einem DOM-Ereignis zu verbinden, sind die folgenden Möglichkeiten gültig:
var myButton = {
... // As above
hookEvent(element) {
// Use bind() to ensure 'this' is the 'this' inside click()
element.addEventListener('click', this.click.bind(this));
}
};
Oder:
var myButton = {
... // As above
hookEvent(element) {
// Use a new variable for 'this' since 'this' inside the function
// will not be the 'this' inside hookEvent()
var me = this;
element.addEventListener('click', function() { me.click() });
}
};
Oder:
var myButton = {
... // As above
hookEvent(element) {
// => functions do not change 'this', so you can use it directly
element.addEventListener('click', () => this.click());
}
};
select = document.querySelector.bind(document)