Erstellen einer neuen Funktion durch Binden von Argumenten an Werte
El bind
Methode erzeugt eine neue Funktion aus einer anderen Funktion mit einem oder mehreren Argumenten, die an bestimmte Werte gebunden sind, einschließlich der impliziten this
Argument.
Teilweise Anwendung
Dies ist ein Beispiel für Teilanwendung . Normalerweise geben wir eine Funktion mit allen Argumenten an, die einen Wert ergibt. Dies wird als Funktionsanwendung bezeichnet. Wir wenden die Funktion auf ihre Argumente an.
Eine Funktion höherer Ordnung (HOF)
Eine Teilanwendung ist ein Beispiel für eine höherwertige Funktion (HOF), weil es eine neue Funktion mit einer geringeren Anzahl von Argumenten ergibt.
Mehrere Argumente binden
Sie können verwenden bind
um Funktionen mit mehreren Argumenten in neue Funktionen umzuwandeln.
function multiply(x, y) {
return x * y;
}
let multiplyBy10 = multiply.bind(null, 10);
console.log(multiplyBy10(5));
Umwandlung von Instanzmethode in statische Funktion
Im häufigsten Anwendungsfall, wenn der Aufruf mit einem Argument erfolgt, wird die bind
Methode wird eine neue Funktion erstellt, die die this
Wert an einen bestimmten Wert gebunden. Dadurch wird eine Instanzmethode in eine statische Methode umgewandelt.
function Multiplier(factor) {
this.factor = factor;
}
Multiplier.prototype.multiply = function(x) {
return this.factor * x;
}
function ApplyFunction(func, value) {
return func(value);
}
var mul = new Multiplier(5);
// Produces garbage (NaN) because multiplying "undefined" by 10
console.log(ApplyFunction(mul.multiply, 10));
// Produces expected result: 50
console.log(ApplyFunction(mul.multiply.bind(mul), 10));
Implementierung eines zustandsabhängigen Rückrufs
Das folgende Beispiel zeigt, wie die Bindung von this
kann eine Objektmethode als Callback fungieren, mit dem der Zustand eines Objekts leicht aktualisiert werden kann.
function ButtonPressedLogger()
{
this.count = 0;
this.onPressed = function() {
this.count++;
console.log("pressed a button " + this.count + " times");
}
for (let d of document.getElementsByTagName("button"))
d.onclick = this.onPressed.bind(this);
}
new ButtonPressedLogger();
<button>press me</button>
<button>no press me</button>
0 Stimmen
Die aufrufende Funktion kann man sich vorstellen als
ptr.func()
und es ist dieptr
die den Kontext liefern.