Dalam JavaScript, apa cara terbaik untuk menghapus fungsi yang ditambahkan sebagai pendengar acara menggunakan bind ()?
Contoh
(function(){
// constructor
MyClass = function() {
this.myButton = document.getElementById("myButtonID");
this.myButton.addEventListener("click", this.clickListener.bind(this));
};
MyClass.prototype.clickListener = function(event) {
console.log(this); // must be MyClass
};
// public method
MyClass.prototype.disableButton = function() {
this.myButton.removeEventListener("click", ___________);
};
})();
Satu-satunya cara yang bisa saya pikirkan adalah melacak setiap pendengar yang ditambahkan dengan bind.
Contoh di atas dengan metode ini:
(function(){
// constructor
MyClass = function() {
this.myButton = document.getElementById("myButtonID");
this.clickListenerBind = this.clickListener.bind(this);
this.myButton.addEventListener("click", this.clickListenerBind);
};
MyClass.prototype.clickListener = function(event) {
console.log(this); // must be MyClass
};
// public method
MyClass.prototype.disableButton = function() {
this.myButton.removeEventListener("click", this.clickListenerBind);
};
})();
Apakah ada cara yang lebih baik untuk melakukan ini?
bindAll
fungsi yang menyederhanakan metode pengikatan. Di dalam penginisialisasi objek Anda, Anda hanya _.bindAll(this)
perlu mengatur setiap metode di objek Anda ke versi terikat. Atau, jika Anda hanya ingin mengikat beberapa metode (yang saya akan merekomendasikan, untuk mencegah kebocoran memori disengaja), Anda dapat memberikan mereka sebagai argumen: _.bindAll(this, "foo", "bar") // this.baz won't be bound
.
this.clickListener = this.clickListener.bind(this);
danthis.myButton.addEventListener("click", this.clickListener);