Uygula ve bağla'yı arayın. ve nasıl farklı olduklarını.
Günlük terminolojiyi kullanarak çağrıyı öğrenip uygulayalım.
your_scooter , your_car and your_jet
Aynı mekanizma (yöntem) ile başlayan üç otomobiliniz var . automobile
Bir yöntemle bir nesne yarattık 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");
}
}
Çağrı ve başvurunun ne zaman kullanıldığını anlayalım. Eğer bir mühendis olduğunu varsayalım sağlar ve sahip your_scooter
, your_car
ve your_jet
hangi bir push_button_engine_start gelmedi ve bir üçüncü tarafı kullanmak isteyenpush_button_engineStart
.
Aşağıdaki kod satırlarını çalıştırırsanız, hata verir. NEDEN?
//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);
Yukarıdaki örnek başarıyla sizin_scooter, otomobiliniz, jetiniz otomobil nesnesinden bir özellik verir.
Daha derine dalalım
Burada yukarıdaki kod satırını ayıracağız.
automobile.push_button_engineStart
kullanılan yöntemi almamıza yardımcı oluyor.
Ayrıca nokta gösterimini kullanarak uygula veya ara özelliğini kullanıyoruz.
automobile.push_button_engineStart.apply()
Şimdi uygulayın ve iki parametreyi kabul etmeyi çağırın.
- bağlam
- argümanlar
Burada bağlamı kodun son satırında ayarladık.
automobile.push_button_engineStart.apply(your_scooter,[20])
Çağrı ve uygulama arasındaki fark , sadece bir virgülle ayrılmış bağımsız değişkenler listesini kabul ederken, uygulamanın bir dizi biçimindeki parametreleri kabul etmesidir.
JS Bind işlevi nedir?
Bir bağlama fonksiyonu temel olarak bir şeyin bağlamını bağlar ve daha sonra onu daha sonraki bir aşamada yürütmek için bir değişkene depolar.
Önceki örneğimizi daha da iyi hale getirelim. Daha önce otomobil nesnesine ait bir yöntem kullandık ve donatmak için kullandık your_car, your_jet and your_scooter
. Şimdi push_button_engineStart
otomobillerimizi tek tek başlatmak için ayrı bir ayrı vermek istediğimizi hayal edelim .
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);
hala memnun değil misiniz?
Gözyaşı damlası olarak netleştirelim. Deneme zamanı. Fonksiyon uygulamasını çağırmak ve uygulamak için geri döneceğiz ve fonksiyonun değerini referans olarak saklamayı deneyeceğiz.
Aşağıdaki deneme başarısız olur çünkü çağrı ve uygulama hemen çağrılır, bu nedenle, bağlama işlevinin şovu çaldığı bir değişkende referans kaydetme aşamasına asla ulaşamayız
var test_function = automobile.push_button_engineStart.apply(your_scooter);