Panggilan berlaku dan ikat. dan bagaimana mereka berbeda.
Mari belajar panggilan dan terapkan menggunakan terminologi harian apa pun.
Anda memiliki tiga mobil your_scooter , your_car and your_jet
yang dimulai dengan mekanisme (metode) yang sama. Kami membuat objek automobile
dengan metode 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");
}
}
Mari kita mengerti kapan panggilan dan melamar digunakan. Mari kita anggap bahwa Anda adalah seorang insinyur dan Anda miliki your_scooter
, your_car
dan your_jet
yang tidak datang dengan push_button_engine_start dan Anda ingin menggunakan pihak ketiga push_button_engineStart
.
Jika Anda menjalankan baris kode berikut, mereka akan memberikan kesalahan. MENGAPA?
//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);
Jadi contoh di atas berhasil memberikan your_scooter, your_car, your_jet fitur dari objek mobil.
Mari selami lebih dalam
Di sini kita akan membagi baris kode di atas.
automobile.push_button_engineStart
membantu kami mendapatkan metode yang digunakan.
Selanjutnya kami menggunakan apply atau call menggunakan notasi titik.
automobile.push_button_engineStart.apply()
Sekarang terapkan dan panggil terima dua parameter.
- konteks
- argumen
Jadi di sini kita mengatur konteks di baris terakhir kode.
automobile.push_button_engineStart.apply(your_scooter,[20])
Perbedaan antara panggilan dan berlaku adalah hanya berlaku menerima parameter dalam bentuk array sementara panggilan hanya dapat menerima daftar argumen yang dipisahkan koma.
apa fungsi JS Bind?
Fungsi bind pada dasarnya yang mengikat konteks sesuatu dan kemudian menyimpannya ke dalam variabel untuk dieksekusi pada tahap selanjutnya.
Mari kita membuat contoh kita sebelumnya menjadi lebih baik. Sebelumnya kami menggunakan metode milik objek mobil dan menggunakannya untuk melengkapi your_car, your_jet and your_scooter
. Sekarang mari kita bayangkan kita ingin memberikan yang terpisah push_button_engineStart
secara terpisah untuk memulai mobil kita sendiri pada setiap tahap selanjutnya dari eksekusi yang kita inginkan.
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);
masih belum puas?
Mari kita perjelas sebagai tetesan air mata. Waktunya bereksperimen. Kami akan kembali untuk memanggil dan menerapkan aplikasi fungsi dan mencoba menyimpan nilai fungsi sebagai referensi.
Eksperimen di bawah ini gagal karena panggilan dan penerapan segera dipanggil, oleh karena itu, kami tidak pernah sampai ke tahap menyimpan referensi dalam variabel yang merupakan fungsi mengikat mencuri acara
var test_function = automobile.push_button_engineStart.apply(your_scooter);