Dalam JavaScript, pembangun sering menghadapi keperluan untuk menetapkan konteks pelaksanaan sesuatu fungsi. Kaedah call() dan apply() berfungsi untuk tujuan ini, membolehkan pengubahsuaian kata kunci fungsi ini. Walau bagaimanapun, kaedah lain, bind(), menawarkan fungsi yang berbeza.
call() vs. apply()
call() dan apply() berkongsi tujuan yang sama : melaksanakan fungsi dengan segera sambil menetapkan konteks tertentu (ini). Walau bagaimanapun, ia berbeza dalam cara hujah dihantar: call() menerima hujah secara individu, manakala apply() menjangkakan tatasusunan tunggal argumen. Perbezaan ini digambarkan dalam contoh kod yang disediakan:
// call() obj.getX.call(obj); // apply() obj.getX.apply(obj);
bind()
Tidak seperti call() dan apply(), bind() tidak digunakan untuk seruan fungsi segera. Sebaliknya, ia mengembalikan fungsi baharu dengan konteks yang ditentukan sebelum terikat. Fungsi terikat ini boleh digunakan kemudian tanpa sebarang pengubahsuaian konteks tambahan. Contoh kod menunjukkan tingkah laku ini:
// bind() // The this keyword of the bound function is locked to obj var boundX = obj.getX.bind(obj); boundX(); // Returns 81
Bila Menggunakan bind()
Gunakan bind() apabila anda ingin mencipta fungsi dengan konteks pratetap untuk pelaksanaan masa hadapan. Ini terbukti amat berguna dalam pengendalian acara, di mana anda memastikan bahawa konteks yang sesuai dikekalkan untuk panggilan balik dan acara tak segerak. Contoh kod yang disediakan menggambarkan kes penggunaan ini:
function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); };
Dalam contoh ini, kaedah onClick terikat pada contoh MyObject supaya apabila peristiwa klik berlaku, kata kunci ini dalam fungsi onClick akan merujuk kepada contoh yang betul.
Kesimpulan
Semasa memanggil() dan memohon() membenarkan untuk penggunaan fungsi segera dengan pengubahsuaian konteks, bind() cemerlang dalam menyediakan fungsi untuk pelaksanaan masa hadapan dengan konteks yang telah ditetapkan. Dengan memahami nuansa kaedah ini, pembangun boleh mengurus konteks fungsi dengan berkesan dalam pelbagai senario.
Atas ialah kandungan terperinci Apakah Perbezaan Antara Kaedah `call()`, `apply()` dan `bind()` JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!