我有一个自定义的EventEmitter对象,它在收到消息时发出。在收到消息后,我将它发布到来自对象的消息交换,该对象将使用从同一对象定义的回调。以下交换功能的示例:
function Exchange() {
this.events = {
published: function (data) {
console.log(data);
}
};
}
Exchange.prototype.publish = function (data) {
this.events.published(data);
};
在我的接收方,我有自定义的EventEmitter,它会发出数据:
server.on('data', function (data) {
exchange.publish(data);
});
这样可行,但由于exchange.publish
和侦听器使用相同的参数,我想使用:
server.on('data', exchange.publish);
这不起作用,因为this
方法内的publish
范围发生了变化,导致this.events
未定义。为什么会这样?
答案 0 :(得分:1)
您将函数本身作为回调传递,因此不会将其作为对象的方法调用,而this
将不会引用该对象。有关this
。
您可以使用.bind
将函数显式绑定到某个对象:
server.on('data', exchange.publish.bind(exchange));