जावास्क्रिप्ट में, बाइंड () का उपयोग करके एक श्रोता के रूप में जोड़े गए फ़ंक्शन को हटाने का सबसे अच्छा तरीका क्या है?
उदाहरण
(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);