1
我在使用EventEmitter2作为我的应用程序内部的消息总线。现在我需要绑定和解绑一些事件处理程序。正如我希望他们也bind他们给定的情况下,我最终的语法如下:绑定绑定函数并将其解除绑定到事件
messageBus.on('foo::bar', _.bind(eventHandler, this));
的问题是,我需要在以后的某个时间取消绑定他们,所以我写了:
messageBus.off('foo::bar', _.bind(eventHandler, this));
不幸的是,这不起作用,因为_.bind
每次都返回一个包装函数的新实例。当然现在我可以运行_.bind
一次绑定包装的函数,比如这个:
var fn = _.bind(eventHandler, this);
messageBus.on('foo::bar', fn);
messageBus.off('foo::bar', fn);
这工作得很好,但如果你有几个事件处理程序,代码很快开始变得比必要的可读性。
如何解决这个问题,而不需要将bind
功能的呼叫外部化?是否有一个替代函数总是返回相同的包装,以防多次调用并且函数和上下文相同?