如何从方法中调用JavaScript对象方法

如何从方法中调用JavaScript对象方法,javascript,Javascript,我只是想弄清楚如何从同一对象的方法中调用javascript对象方法,如下所示 var testObject = { method1 : function() { var connectionAddr = "ws://localhost:8003"; socket = new WebSocket(connectionAddr); socket.onmessage = function(event) { method2

我只是想弄清楚如何从同一对象的方法中调用javascript对象方法,如下所示

var testObject = {
    method1 : function() {
        var connectionAddr = "ws://localhost:8003";
        socket = new WebSocket(connectionAddr);
        socket.onmessage = function(event) {
            method2();
        }

    },

    method2: function() {
        this.method1();
    }
}

使用此方法时,我意识到已更改了我的问题。2它指的是WebSocker对象。

中有很多关于此类问题的答案,在这里提问之前,您应该先在SO或Google上进行一些研究

var testObject = {
    method1 : function() {
        var connectionAddr = "ws://localhost:8003",
            self = this;
        socket = new WebSocket(connectionAddr);
        socket.onmessage = function(event) {
            self.method2();
        }
    },

    method2: function() {
        this.method1(); //something like this would cause an infinite call stack, you should change this code
        //this refers to the current object, so has properties method2 and method2
    }
}

您需要使用它引用当前对象,否则JS引擎将在任何更高的作用域中查找名为method1的函数,一直到全局名称空间。如果这样的函数对象或名称不存在,method1将被计算为undefined。

更新以匹配您当前的问题:好的部分是您可以添加其他函数并使用此方法调用其中任何一个函数

var testObject = {
   method1 : function() {
    var connectionAddr = "ws://localhost:8003",
        self = this;
    socket = new WebSocket(connectionAddr);
    socket.onmessage = function(event) {
        self['method2']();
    }
},

method2: function() {
    this['method1']();
}
}
试试这个

var testObject = {
        method1 : function() {
            var connectionAddr = "ws://localhost:8003";
            socket = new WebSocket(connectionAddr);
            socket.onmessage = function(event) {
                testObject.method2();
            }

        },

        method2: function() {
            testObject.method1();
        }
    }

我确实看了,但我看到的示例是在对象中使用对象而不是属性,但谢谢你的回答。@Jack:既然函数是对象,你也在对象中使用对象……更改了问题,很抱歉原来的问题很愚蠢。更改了答案,请注意代码中的注释。在这种情况下,您需要保存对当前文件的引用,以便在不同的范围内使用它。感谢您的帮助,我知道它将以内循环结束,我只是快速更改了它。这是我相信的最干净的方式,谢谢!!