Javascript 函数作用域问题

标签 javascript scope

我正在做一个 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;
    };
};

如何从 socket.onmessage 事件访问 this.setId()?

最佳答案

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

关于Javascript 函数作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4292989/

相关文章:

javascript - Jquery 自定义选择/组合框

javascript - 加州 DMV 网站上的不可禁用粘贴

javascript - 如何将多个相似的功能合并为一个?

javascript - 在 Google 表格中移动单元格范围

python - 为什么这个类似 python 的 ruby​​ 脚本不起作用?

C++ 全局作用域类

javascript - Angular 加载速度不够快以防止 ng-repeat 错误

调用静态变量时 C++ 未解析的外部

C 堆栈分配的字符串作用域

javascript - JS局部变量改变全局