Javascript jQuery off()和bind(this)

Javascript jQuery off()和bind(this),javascript,jquery,bind,Javascript,Jquery,Bind,我正在尝试从元素中删除事件处理程序,附加jQuery的on()并使用off()将其删除。这通常会起作用,但在这种情况下,它不起作用 this.element.on('click', this.handler); this.element.off('click', this.handler); 这将起作用,但在我的例子中,它不起作用,因为它将作用域绑定到处理程序 this.element.on('click', this.handler.bind(this)); this.element.off

我正在尝试从元素中删除事件处理程序,附加jQuery的
on()
并使用
off()将其删除。这通常会起作用,但在这种情况下,它不起作用

this.element.on('click', this.handler);
this.element.off('click', this.handler);
这将起作用,但在我的例子中,它不起作用,因为它将作用域绑定到处理程序

this.element.on('click', this.handler.bind(this));
this.element.off('click', this.handler.bind(this));
由于作用域绑定到处理程序,因此
off
方法无法将事件与元素分离

我试过使用一个参考,如下所示:

var self = this;
this.element.on('click', this.handler.bind(self));
this.element.off('click', this.handler.bind(self));

但是没有运气。。。有人有办法解决这个问题吗?

我会尝试将显式绑定的东西作为参考:

var h = this.handler.bind(this);
this.element.on('click', h);
this.element.off('click', h);

存储对单个函数的引用的另一种解决方案是使用命名空间事件

this.element.on('click.iamspecial', this.handler.bind(this));
this.element.off('click.iamspecial');

尝试将
this.handler.bind(self)
的结果存储在变量中,并通过引用传递。要使解除绑定工作,如果向其传递函数,则该函数必须与传递给绑定的函数相同。再次调用.bind()将创建一个新函数。智能移动!是的,这会起作用,但会使我的代码有点草率,在这种情况下,我需要重写很多代码,并将其作为类的方法/属性,因为我的获取和分离不在同一个函数中。你不能像Dan在回答中所做的那样吗?或者更复杂。你也可以改为为为你的事件命名名称空间,这样你就可以按名称空间而不是处理程序删除特定的事件。谢谢,是的,Dan说的和你说的一样,我现在明白了,再次调用bind将创建一个新函数,这就是问题所在。在这种情况下,我必须为每个处理程序编写一个类成员变量。我更喜欢一种更干净的方式,你能更具体地介绍NS活动吗?谢谢Dan!我会考虑这个方法。