JavaScript:调用已启动类(数据包处理程序)的变量函数
JavaScript: Calling variable functions of an initiated class (packet-handler)
我正在用Node.JS构建一个服务器/客户端模型,并希望通过使用变量数据包ID来调用一个已经实例化的类的函数,并通过不同的函数处理传入的服务器数据包。因此,我将数据包id作为PacketMethods
对象的属性,并将要调用的函数作为每个数据包id属性的值。然而,在本例中,当调用ServerList()
时,它不是启动的Client
类的成员,因此this.socket
是未定义的。
如何调用数据包处理函数,使它们成为Client
的成员?
function Client (...)
{
this.socket = new net.Socket();
...
}
Client.prototype.HandlePacket = function(blocks)
{
try {
var sPacket = new WRPacket(blocks);
var PacketMethods = {
4352 : this.ServerList
4351 : this.LoginResponse
}
if(PacketMethods.hasOwnProperty(sPacket._packetid))
PacketMethods[sPacket._packetid](sPacket);
else
console.log('Unhandled Packet: '+sPacket._packetid);
} catch(err) {
console.log("Error at Packet-Handler:'n"+err);
}
}
Client.prototype.ServerList = function(Packet)
{
console.log('Serverlist received ...');
...
this.socket.end();
}
谢谢!
您可以将方法bind
发送到您的实例:
var PacketMethods = {
4352 : this.ServerList.bind(this),
4351 : this.LoginResponse.bind(this)
}
您可以简单地使用PacketMethods
来存储方法的名称,然后使用正确的上下文调用它们:
var PacketMethods = {
4352 : 'ServerList'
4351 : 'LoginResponse'
};
if (PacketMethods.hasOwnProperty(sPacket._packetid)) {
var method = PacketMethods[sPacket._packetid];
this[method](sPacket);
}
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在MVVM视图模型中处理应用程序范围的元素
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Python/Selenium网络驱动程序处理Angularjs/Javascript下拉列表
- 在 AJAX 完成之前,不要让其他处理程序处理
- 如何使用硒铬驱动程序处理地理位置弹出窗口
- 如何使用硒网络驱动程序处理 onblur 事件
- 是否有一种方法为chrome打包应用程序处理Http BasicAuthentication
- Ajax加载程序处理问题