Проблемы с областью функций Javascript - PullRequest
2 голосов
/ 27 ноября 2010

Я работаю над небольшой демонстрацией Websockets, и у меня проблема с областью действия, которую я не могу отсортировать.

network = function () {

    this.host = "ws://localhost:8002/server.js";
    this.id = null;

    this.init = function (s) {
        var scene = s;

        try {
            socket = new WebSocket(this.host);

            socket.onopen = function (msg) {
            };

            socket.onmessage = function (msg) {
                switch(msg.data[0]) {
                case 'i':
                    var tmp = msg.data.split('_');

                    // cant access this function.
                    this.setId(tmp[1]);

                    break;
                }
            };

            socket.onclose = function (msg) {
            };
        }
        catch (ex) {}
    };

    this.setId = function(id) {
        this.id = id;
    };
};

Как я могу получить доступ к this.setId () из события socket.onmessage?

1 Ответ

2 голосов
/ 27 ноября 2010
network = function () {
    var self = this;

    this.host = "ws://localhost:8002/server.js";
    this.id = null;

    this.init = function (s) {
        var scene = s;

        try {
            socket = new WebSocket(self.host);

            socket.onopen = function (msg) {
            };

            socket.onmessage = function (msg) {
                switch(msg.data[0]) {
                case 'i':
                    var tmp = msg.data.split('_');

                    // cant access this function.
                    self.setId(tmp[1]);

                    break;
                }
            };

            socket.onclose = function (msg) {
            };
        }
        catch (ex) {}
    };

    this.setId = function(id) {
        self.id = id;
    };
};

Сохранение такой ссылки должно сделать это. в любое время, когда вы ссылаетесь на this в функции, замените this на self.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...