Zadzwoń, zastosuj i zwiąż. i jak się różnią.
Pozwala nauczyć się dzwonić i aplikować przy użyciu codziennej terminologii.
Masz trzy samochody, your_scooter , your_car and your_jet
które zaczynają z tym samym mechanizmem (metodą). Stworzyliśmy obiekt automobile
za pomocą metody 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");
}
}
Pozwala zrozumieć, kiedy jest używany i zadzwoń. Załóżmy, że jesteś inżynierem i tak jest your_scooter
, your_car
a your_jet
który nie był wyposażony w funkcję push_button_engine_start i chcesz korzystać z usług innej firmy push_button_engineStart
.
Jeśli uruchomisz następujące wiersze kodu, dadzą błąd. DLACZEGO?
//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);
Tak więc powyższy przykład z powodzeniem nadaje twojemu skuterowi, twojemu samochodowi, twojemu atramentowi funkcję obiektu samochodowego.
Zanurkujmy głębiej
Tutaj podzielimy powyższą linię kodu.
automobile.push_button_engineStart
pomaga nam uzyskać zastosowaną metodę.
Ponadto używamy zastosowania lub połączenia za pomocą notacji kropkowej.
automobile.push_button_engineStart.apply()
Teraz zastosuj i zaakceptuj dwa parametry.
- kontekst
- argumenty
Tutaj ustawiamy kontekst w ostatnim wierszu kodu.
automobile.push_button_engineStart.apply(your_scooter,[20])
Różnica między wywołaniem a zastosowaniem polega na tym, że zastosowanie akceptuje parametry w postaci tablicy, podczas gdy wywołanie może po prostu zaakceptować listę argumentów oddzieloną przecinkami.
Co to jest funkcja JS Bind?
Funkcja powiązania to po prostu powiązanie kontekstu czegoś, a następnie zapisanie go w zmiennej do wykonania na późniejszym etapie.
Uczyńmy nasz poprzedni przykład jeszcze lepszym. Wcześniej używaliśmy metody należącej do obiektu samochodowego i używaliśmy jej do wyposażenia your_car, your_jet and your_scooter
. Teraz wyobraźmy sobie, że chcemy osobno dać push_button_engineStart
osobno, aby osobno uruchomić nasze samochody na dowolnym późniejszym etapie realizacji.
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);
nadal nie jesteś zadowolony?
Wyjaśnijmy to jak łzy. Czas na eksperyment. Wrócimy do wywołania i zastosowania aplikacji funkcji i spróbujemy zapisać wartość funkcji jako odniesienie.
Poniższy eksperyment kończy się niepowodzeniem, ponieważ wywołanie i zastosowanie są wywoływane natychmiast, dlatego nigdy nie przechodzimy do etapu przechowywania odwołania w zmiennej, w której funkcja wiązania kradnie przedstawienie
var test_function = automobile.push_button_engineStart.apply(your_scooter);