0

我有一个自定义 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未定义。为什么会这样?

4

1 回答 1

1

您将函数本身作为回调传递,因此它不会作为对象的方法调用,this也不会引用该对象。有关. _ _this

您可以使用.bind将函数显式绑定到某个对象:

server.on('data', exchange.publish.bind(exchange));
于 2013-12-02T19:36:33.850 回答