-1

以下と同じオブジェクトのメソッド内からJavaScriptオブジェクトメソッドを呼び出す方法を理解しようとしています..

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

    },

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

this.method2() を使用するときに WebSocker オブジェクトを参照していることに気付いたので、質問を変更しました。

4

3 に答える 3

4

SO には、このような問題に対する多くの回答があります。ここで質問する前に、(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 エンジンはグローバル名前空間まで、より高いスコープのいずれかで名前がthis付けられた関数を探します。method1そのような関数オブジェクト (またはそのような名前が存在しない) の場合、method1は に評価されundefinedます。

于 2013-08-02T09:32:42.483 に答える
0

現在の質問に合わせて更新されました。良い点は、追加の関数を追加して、このメソッドでそれらのいずれかを呼び出すことができることです。

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']();
}
}
于 2013-08-02T09:47:53.973 に答える