Bind erstellt eine neue Funktion, die die this
innerhalb der Funktion als Parameter, der an bind()
.
Hier ist ein Beispiel, das zeigt, wie man bind
eine Mitgliedsmethode zu übergeben, die die richtige 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
Das wird ausgedruckt:
OK clicked
undefined clicked
OK clicked
Sie können auch zusätzliche Parameter nach dem ersten ( this
) Parameter und bind
wird diese Werte an die ursprüngliche Funktion weitergeben. 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));
Das wird ausgedruckt:
15
Überprüfen Sie JavaScript Funktion binden für weitere Informationen und interaktive Beispiele.
Update: ECMAScript 2015 bietet Unterstützung für =>
Funktionen. =>
Funktionen sind kompakter und verändern nicht die this
Zeiger aus ihrem Definitionsbereich, so dass Sie möglicherweise nicht bind()
wie oft. Wenn Sie zum Beispiel eine Funktion für Button
aus dem ersten Beispiel, um die Verbindung zwischen click
Callback zu einem DOM-Ereignis, die folgenden sind alle gültige Möglichkeiten, das zu tun:
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());
}
};
0 Stimmen
Die aufrufende Funktion kann man sich vorstellen als
ptr.func()
und es ist dieptr
die den Kontext liefern.