Bind erstellt eine neue Funktion, die erzwingt, dass das this
Innere der Funktion der Parameter ist, an den übergeben wird bind()
.
Hier ist ein Beispiel, das zeigt, wie bind
eine 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 bind
diese 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 this
Zeiger nicht von ihrem definierten Bereich, sodass Sie ihn möglicherweise nicht bind()
so oft verwenden müssen. Wenn Sie beispielsweise eine Funktion Button
aus dem ersten Beispiel aktivieren click
mö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)