Anruf anwenden und binden. und wie unterschiedlich sie sind.
Lernen wir das Anrufen und Anwenden unter Verwendung einer beliebigen täglichen Terminologie.
Sie haben drei Autos, your_scooter , your_car and your_jet
die mit dem gleichen Mechanismus (Methode) beginnen. Wir haben ein Objekt automobile
mit einer Methode erstellt 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 Anruf und Anwendung verwendet wird. Lets nehme an, dass Sie ein Ingenieur, und Sie haben your_scooter
, your_car
und your_jet
die mit einem push_button_engine_start nicht gekommen , und Sie wünschen , einen Dritten zu verwenden push_button_engineStart
.
Wenn Sie die folgenden Codezeilen ausführen, wird ein Fehler ausgegeben. 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);
Das obige Beispiel gibt Ihrem_scooter, your_car, your_jet erfolgreich eine Funktion aus einem Automobilobjekt.
Lassen Sie uns tiefer eintauchen.
Hier werden wir die obige Codezeile aufteilen.
automobile.push_button_engineStart
hilft uns, die angewandte Methode zu finden.
Weiterhin verwenden wir Apply oder Call mit der Punktnotation.
automobile.push_button_engineStart.apply()
Wenden Sie nun zwei Parameter an und rufen Sie an.
- Kontext
- Argumente
Hier setzen wir den Kontext in die letzte Codezeile.
automobile.push_button_engineStart.apply(your_scooter,[20])
Der Unterschied zwischen call und apply besteht nur darin, dass apply Parameter in Form eines Arrays akzeptiert, während call einfach eine durch Kommas getrennte Liste von Argumenten akzeptieren kann.
Was ist die JS-Bindungsfunktion?
Eine Bindefunktion bindet im Grunde den Kontext von etwas und speichert es dann in einer Variablen zur späteren Ausführung.
Lassen Sie uns unser vorheriges Beispiel noch besser machen. Früher haben wir eine Methode verwendet, die zum Automobilobjekt gehört, und sie zur Ausrüstung verwendet your_car, your_jet and your_scooter
. Stellen wir uns nun vor, wir möchten ein separates push_button_engineStart
separates System erstellen, um unsere Autos zu einem späteren Zeitpunkt der gewünschten Ausführung einzeln zu 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?
Lassen Sie es uns als Träne klar machen. Zeit zum Experimentieren. Wir werden zurückkehren, um die Funktionsanwendung aufzurufen und anzuwenden, und versuchen, den Wert der Funktion als Referenz zu speichern.
Das folgende Experiment schlägt fehl, da Aufruf und Anwenden sofort aufgerufen werden. Daher gelangen wir nie zum Stadium des Speicherns einer Referenz in einer Variablen, in der die Bindungsfunktion die Show stiehlt
var test_function = automobile.push_button_engineStart.apply(your_scooter);