2010-11-27 19 views
2

私は少しWebsocketsデモで作業しています。私はソートできないスコープの問題があります。Javascript関数のスコープの問題

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()にアクセスするにはどうすればよいですか?

答えて

2
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を参照する場合はいつでも、thisselfに置き換えてください。

+0

華麗で、魅力的です。ありがとう! :-) – harrynorthover