2013-03-06 3 views
1

Websocket 연결 시간을 측정하고 있습니다. 열려있는 범위를 서버 Object에 바인딩해야합니다. 그러나 나는 또한 처음부터 연결을 마치는 시간 인 시간 1을 가지고 있습니다. 나는 time1을 Object에두기를 원했다. Object는 잘 작동하지만 bind 함수에서는 아무 것도 사용하지 않는다.Javascript bind and this

for(var i = 0; i < 10; i++) { 
    Server[i] = new WebSocket('ws://127.0.0.1:9300'); 
    var time1 = new Date; 
    Server[i].time1 = time1; 

    Server[i].bind('open', function() { 
         var time2 = new Date; 
         /*** doesn't work ***/ 
         console.log(time2 - this.time1); 
         /*** doesn't work ***/ 
         console.log(time2 - Server[i].time1) 
         /*** ***/ 
    }); 
} 

두 가지 방법 모두 시도하지 못했습니다. 바인딩에 다른이 있지만 사람이 나에게 각 서버 [1] 개체에 매번 보안을 설정하고이 바인딩 메서드에서 액세스 권한을 얻는 방법을 말해 줄 수 있습니까?

감사합니다.

UPDATE *

당신은 또한 제대로 당신과 같이 i의 값을 통해 닫아야

this.conn.onopen = function(){dispatch('open',null)} 

    var dispatch = function(event_name, message){ 
     var chain = callbacks[event_name]; 
     if(typeof chain == 'undefined') return; // no callbacks for this event 
     for(var i = 0; i < chain.length; i++){ 
      chain[i](message) 
     } 
    } 

답변

2

작동하므로이 기능을 변경하는 방법을 알 수 없습니다 :

Server[i].bind('open', function(i) { 
    return function() { 
     var time2 = new Date; 
     console.log(time2 - Server[i].time1) 
    } 
}(i)); 

기타 모든 함수는 동일한 변수를 계속 참조합니다.