我在我的应用程序中使用EventEmitter2作为内部消息总线。现在我需要绑定和取消绑定一些事件处理程序。由于我还希望它们将它们绑定到给定的上下文,因此我最终得到以下语法:
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
?如果您多次调用它并且函数和上下文相同,是否有一个替代函数总是返回相同的包装器?