2013-03-06 61 views
1

我正在建立一個測量Websocket連接的時間。我需要將打開的作用域綁定到服務器對象。但我也有從開始到結束連接的時間。 我想把時間1放到對象上,它工作正常,但是我沒有在綁定函數中使用它。Javascript綁定和這個

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到每個服務器[i]對象,然後在此綁定方法中獲得訪問權限?

謝謝!

UPDATE *

你能不能也告訴如何改變這種功能,因此它能夠正常工作

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

您必須關閉超過i值,像這樣:

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

其他ise所有的函數都會引用同一個變量。