在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", ___________); }; })();
我能想到的唯一方法是跟踪添加了bind的每个侦听器。
上面的示例使用此方法:
(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); }; })();
有没有更好的方法可以做到这一点?
尽管@machineghost所说的是正确的,但事件的添加和删除方式相同,但等式中缺少的部分是:
.bind()调用后会创建一个新的函数引用!
.bind()
因此,要添加或删除它,请将引用分配给变量:
var x = this.myListener.bind(this); Toolbox.addListener(window, 'scroll', x); Toolbox.removeListener(window, 'scroll', x);
这对我来说是预期的。