Rumah >hujung hadapan web >tutorial js >`bind()`, `call()` dan `apply()` Javascript: Bilakah Saya Perlu Menggunakan Setiap?
Javascript's bind() vs call() dan apply(): Bila Perlu Menggunakan Setiap?
Semasa memanggil() dan memohon() kedua-duanya digunakan untuk memanggil fungsi dalam konteks tertentu (dengan menetapkan kata kunci ini dalam fungsi), perbezaan utamanya terletak pada cara hujah dihantar ke fungsi. call() menjangkakan argumen akan dihantar dalam senarai yang dipisahkan koma, manakala apply() memerlukan tatasusunan argumen.
Menggunakan Kaedah bind()
Tidak seperti call() dan apply(), bind() tidak menggunakan fungsi serta-merta. Sebaliknya, ia mengembalikan fungsi terikat baharu yang, apabila digunakan kemudian, akan mempunyai set konteks yang betul untuk memanggil fungsi asal. Ini amat berguna dalam situasi di mana anda ingin mengekalkan konteks dalam panggilan balik atau peristiwa tak segerak.
Sebagai contoh, pertimbangkan kod berikut:
function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; MyObject.prototype.onClick = function(e) { var t=this; //do something with [t]... //without bind the context of this function wouldn't be a MyObject //instance as you would normally expect. };
Dalam pengendali onClick, kata kunci ini akan merujuk kepada contoh MyObject yang mencipta pendengar acara, walaupun acara sedang dicetuskan secara tidak segerak.
Bila Menggunakan Panggilan/Apply vs. Bind
Gunakan call() atau apply() apabila anda perlu menggunakan fungsi dengan segera dan mengubah suai konteksnya. Sebaliknya, gunakan bind() apabila anda mahu fungsi itu boleh dipanggil kemudian dengan konteks tertentu, seperti dalam acara.
Berikut ialah ilustrasi mudah:
var obj = { x: 81, getX: function() { return this.x; } }; alert(obj.getX.bind(obj)()); // 81 alert(obj.getX.call(obj)); // 81 alert(obj.getX.apply(obj)); // 81
Dalam ketiga-tiga senario , output ialah 81, kerana semua fungsi akan menggunakan fungsi getX dalam konteks obj. Walau bagaimanapun, versi bind() mengembalikan fungsi baharu yang, apabila dilaksanakan, akan mempunyai set konteks yang diingini.
Atas ialah kandungan terperinci `bind()`, `call()` dan `apply()` Javascript: Bilakah Saya Perlu Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!