ใน JavaScript วิธีที่ดีที่สุดในการลบฟังก์ชั่นที่เพิ่มเข้ามาเป็นฟังเหตุการณ์โดยใช้ bind () คืออะไร?
ตัวอย่าง
(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", ___________);
};
})();
วิธีเดียวที่ฉันคิดได้คือการติดตามผู้ฟังทุกคนที่เพิ่มเข้ามาด้วยการผูก
ตัวอย่างข้างต้นด้วยวิธีนี้:
(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);
};
})();
มีวิธีที่ดีกว่าในการทำเช่นนี้?
bindAll
ฟังก์ชันที่ช่วยลดความยุ่งยากของเมธอด ภายในเครื่องมือเริ่มต้นวัตถุของคุณคุณเพียงแค่_.bindAll(this)
ตั้งค่าทุกวิธีในวัตถุของคุณให้เป็นรุ่นที่ถูกผูกไว้ หรือถ้าคุณเพียงต้องการที่จะผูกวิธีการบางอย่าง (ซึ่งผมอยากแนะนำให้เพื่อป้องกันการรั่วไหลของหน่วยความจำที่ไม่ได้ตั้งใจ) _.bindAll(this, "foo", "bar") // this.baz won't be bound
คุณสามารถให้พวกเขาเป็นอาร์กิวเมนต์:
this.clickListener = this.clickListener.bind(this);
และthis.myButton.addEventListener("click", this.clickListener);