Call apply and bind. und wie sie sich unterscheiden.
Lasst uns lernen, wie man telefoniert und wie man eine alltägliche Terminologie anwendet.
Sie haben drei Automobile your_scooter , your_car and your_jet
die mit demselben Mechanismus (Methode) beginnen. Wir haben ein Objekt erstellt automobile
mit einer Methode push_button_engineStart
.
var your_scooter, your_car, your_jet;
var automobile = {
push_button_engineStart: function (runtime){
console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes");
}
}
Lassen Sie uns verstehen, wann "Call and Apply" verwendet wird. Nehmen wir an, Sie sind ein Ingenieur und haben your_scooter
, your_car
y your_jet
die nicht mit einem push_button_engine_start ausgeliefert wurde und Sie einen Drittanbieter verwenden möchten push_button_engineStart
.
Wenn Sie die folgenden Codezeilen ausführen, geben sie einen Fehler aus. WARUM?
//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();
automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
So ist das obige Beispiel erfolgreich gibt your_scooter, your_car, your_jet ein Merkmal von Automobil-Objekt.
Lassen Sie uns tiefer eintauchen Hier werden wir die obige Codezeile aufteilen. automobile.push_button_engineStart
hilft uns bei der Ermittlung der verwendeten Methode.
Außerdem verwenden wir apply oder call in der Punktschreibweise. automobile.push_button_engineStart.apply()
Jetzt akzeptieren Antrag und Aufruf zwei Parameter.
- Kontext
- Argumente
In der letzten Zeile des Codes wird also der Kontext festgelegt.
automobile.push_button_engineStart.apply(your_scooter,[20])
Unterschied zwischen Aufruf und Antrag ist nur, dass apply Parameter in Form eines Arrays akzeptiert, während call einfach eine durch Kommata getrennte Liste von Argumenten akzeptieren kann.
Was ist die JS-Bind-Funktion?
Eine Bindungsfunktion bindet im Grunde den Kontext von etwas und speichert ihn dann in einer Variablen zur späteren Ausführung.
Lassen Sie uns unser vorheriges Beispiel noch besser machen. Zuvor haben wir eine Methode verwendet, die zum Auto-Objekt gehört, und sie dazu benutzt, um your_car, your_jet and your_scooter
. Stellen wir uns nun vor, wir wollen eine separate push_button_engineStart
Wir können unsere Autos zu jedem späteren Zeitpunkt der Ausführung einzeln starten.
var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter);
var car_engineStart = automobile.push_button_engineStart.bind(your_car);
var jet_engineStart = automobile.push_button_engineStart.bind(your_jet);
setTimeout(scooty_engineStart,5000,30);
setTimeout(car_engineStart,10000,40);
setTimeout(jet_engineStart,15000,5);
immer noch nicht zufrieden?
Machen wir es klar wie Kloßbrühe. Zeit zum Experimentieren. Wir gehen zurück zum Aufruf und zur Anwendung der Funktion und versuchen, den Wert der Funktion als Referenz zu speichern.
Das folgende Experiment schlägt fehl, weil call und apply sofort aufgerufen werden und wir daher nie dazu kommen, eine Referenz in einer Variablen zu speichern, was der bind-Funktion die Show stiehlt
var test_function = automobile.push_button_engineStart.apply(your_scooter);