Chiama applicare e associare. e come sono diversi.
Consente di imparare a chiamare e applicare utilizzando qualsiasi terminologia giornaliera.
Hai tre automobili your_scooter , your_car and your_jet
che iniziano con lo stesso meccanismo (metodo). Abbiamo creato un oggetto automobile
con un metodo 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");
}
}
Consente di capire quando è chiamata e applicare utilizzato. Supponiamo che tu sia un ingegnere e tu abbia your_scooter
, your_car
e your_jet
che non è venuto con un push_button_engine_start e che desideri utilizzare una terza parte push_button_engineStart
.
Se si eseguono le seguenti righe di codice, verranno visualizzati degli errori. PERCHÉ?
//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);
Quindi l'esempio sopra riportato dà a your_scooter, your_car, your_jet una funzione dall'oggetto automobile.
Tuffiamoci più in profondità
Qui divideremo la riga di codice sopra.
automobile.push_button_engineStart
ci sta aiutando a ottenere il metodo utilizzato.
Inoltre usiamo apply o call usando la notazione punto.
automobile.push_button_engineStart.apply()
Ora applica e chiama accetta due parametri.
- contesto
- argomenti
Quindi qui impostiamo il contesto nell'ultima riga di codice.
automobile.push_button_engineStart.apply(your_scooter,[20])
La differenza tra call e apply è solo che apply accetta i parametri sotto forma di un array mentre call può semplicemente accettare un elenco di argomenti separato da virgole.
che cos'è la funzione JS Bind?
Una funzione di bind è fondamentalmente che lega il contesto di qualcosa e quindi lo memorizza in una variabile per l'esecuzione in una fase successiva.
Facciamo ancora meglio il nostro esempio precedente. In precedenza abbiamo usato un metodo appartenente all'oggetto automobile e l'abbiamo usato per equipaggiare your_car, your_jet and your_scooter
. Ora immaginiamo di voler dare un separato push_button_engineStart
separatamente per avviare le nostre automobili individualmente in qualsiasi fase successiva dell'esecuzione che desideriamo.
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);
non sei ancora soddisfatto?
Facciamo in modo chiaro come lacrima. È tempo di sperimentare. Torneremo a chiamare e ad applicare l'applicazione della funzione e proveremo a memorizzare il valore della funzione come riferimento.
L'esperimento riportato di seguito fallisce perché call e apply vengono invocati immediatamente, quindi non arriviamo mai alla fase di memorizzazione di un riferimento in una variabile in cui la funzione bind ruba lo spettacolo
var test_function = automobile.push_button_engineStart.apply(your_scooter);