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));

その後、ソケットのメッセージ ハンドラーは常に Client インスタンスにバインドされます。

于 2013-08-19T06:43:18.000 に答える