জাভাস্ক্রিপ্টে, বাইন্ড () ব্যবহার করে ইভেন্ট শ্রোতা হিসাবে যুক্ত কোনও ফাংশন সরানোর সর্বোত্তম উপায় কী?
উদাহরণ
(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);