0

我的客户“类”如下所示:

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不解析为客户端类。无论如何要通过this函数或通过函数传递什么this.socket.on('message', this.message_handler)?这样,我可以将继承与不同的处理程序一起使用。

4

1 回答 1

1

使用此处描述的 JavascriptFunction.prototype.bind功能。在您的情况下,您可以这样做(由于@nhaa123 的修复而更新):

this.socket.on('message', this.message_handler.bind(this));

然后套接字的消息处理程序将始终绑定到客户端实例。

于 2013-08-19T06:43:18.000 回答