Node.js 正确使用NodeJs中的事件-关于;这";上下文

Node.js 正确使用NodeJs中的事件-关于;这";上下文,node.js,prototype,this,event-listener,Node.js,Prototype,This,Event Listener,我正在Node中设计一个通信服务器,它处理传入的消息(由client1发送)并将它们传输给其他人(client2),后者应答消息并通过服务器将应答发送回client1。 通信通过WebSocket进行,这意味着从每个客户端到服务器的连接都是开放的 因此,我实现了一个ConnectionManager,当新客户机联机时,我可以向它注册任何新连接。每个连接都会被分配一个messageQueue,所有传入的消息在处理之前都会缓存在该队列中 在处理结束时,我有一个ServerTaskManager,它为

我正在Node中设计一个通信服务器,它处理传入的消息(由client1发送)并将它们传输给其他人(client2),后者应答消息并通过服务器将应答发送回client1。 通信通过WebSocket进行,这意味着从每个客户端到服务器的连接都是开放的

因此,我实现了一个ConnectionManager,当新客户机联机时,我可以向它注册任何新连接。每个连接都会被分配一个messageQueue,所有传入的消息在处理之前都会缓存在该队列中

在处理结束时,我有一个ServerTaskManager,它为服务器生成输出任务,告诉他要发送的消息和要接收的接收者

此ServerTaskManager在注册服务器侦听的新serverTask时发出节点事件(从EventEmitter继承)

现在我想让我的ConnectionManager也监听serverTaskManager的事件,以便让他将messageQueue中的下一条消息推送到处理中

现在的问题是,我可以在ConnectionManager中捕获ServerTaskManager事件,但是,当然,侦听器中的“this”是ServerTaskManager,而不是ConnectionManager。因此,调用属于ConnectionManager的任何“this.someFunction()”函数都无法工作

下面是一些代码:

/**
* ServerTaskManager - Constructor
* Implements Singleton pattern. 
*/
function ServerTaskManager() 
{
var __instance;

ServerTaskManager = function ServerTaskManager()
{
    return __instance;
}

ServerTaskManager.prototype = this;

__instance = new ServerTaskManager();
__instance.constructor = ServerTaskManager;

return __instance;
}

util.inherits(ServerTaskManager, EventEmitter);


现在,当我运行此命令,serverTaskManager触发“newInstructions”事件时,节点抛出:

 TypeError: Object #<ServerTaskManager> has no method 'processNextMessage'
显然,在侦听ServerTaskManager事件时,侦听器中的“this”就是ServerTaskManager。现在,如何从侦听器中调用ConnectionManager的函数

我希望我没有被事件、侦听器和/或原型扩展(在节点中)的工作方式完全误导。这个项目是我用JavaScript开发的最先进的项目。通常我只是用一点客户端JS编写PHP

任何提示,请提前发送Thx! 像这样的虫草

serverTaskManager.on('newInstruction', function(messageObject, currentReceiver)
{
     ConnectionManager.processNextMessage(currentReceiver);
});
或者像这样

serverTaskManager.on('newInstruction', function(messageObject, currentReceiver)
{
     ConnectionManager().processNextMessage(currentReceiver);
});

附言:你的问题太长了。发布代码时,不必发布示例。将代码简化为最简单的形式来展示您所看到的行为要容易得多。通过这种方式,您将获得更高质量的响应。

Thx,非常有效。对不起,邮件太长了。这是我在这里的第一个问题,我不完全确定如何把我的观点说清楚。我会好起来的!谢谢你的回答和提示!
serverTaskManager.on('newInstruction', function(messageObject, currentReceiver)
{
     ConnectionManager.processNextMessage(currentReceiver);
});
serverTaskManager.on('newInstruction', function(messageObject, currentReceiver)
{
     ConnectionManager().processNextMessage(currentReceiver);
});