我的客户“类”看起来像这样:
var Client = (function () {
function Client(socket)
{
this.socket = socket;
this.country_code = null;
var that = this;
this.socket.on('message', function(data) {
var r = JSON.parse(data);
switch (r.action) {
case 'init':
that.country_code = r.country_code;
break;
}
});
}
Client.prototype.message_handler = function(data)
{
};
return Client;
})();
我正在使用websocket.io模块接收来自客户端的消息。现在,上面的代码有效,但我真的想拥有Client.prototype.message_handler
,所以ctor看起来像这样:
function Client(socket)
{
this.socket = socket;
this.country_code = null;
this.socket.on('message', this.message_handler);
}
然而,问题是现在在message_handler函数中
Client.prototype.message_handler = function(data)
{
var r = JSON.parse(data);
switch (r.action) {
case 'init':
this.country_code = r.country_code; // Doesn't work.
break;
}
};
this
无法解析为Client-class。无论如何通过this
将this.socket.on('message', this.message_handler)
传递给函数?这样,我可以使用不同处理程序的继承。
答案 0 :(得分:1)
使用here所述的Javascript Function.prototype.bind
功能。在你的情况下,你可以这样做(更新感谢@ nhaa123的修复):
this.socket.on('message', this.message_handler.bind(this));
然后socket的消息处理程序将始终绑定到Client实例。