2013-03-06 2 views
1

Я строю измерение времени для соединения с Websocket. Мне нужно связать открытую область с объектом сервера. Но у меня также есть время1, время от начала до конца соединения. Я хотел поставить time1 в Object, который работает нормально, но у меня нет доступа к нему в функции bind.Связывание 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] Object, а затем получить доступ к нему в этом методе связывания?

Спасибо!

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)); 

Otherw ise все ваши функции продолжают ссылаться на одну и ту же переменную.

Смежные вопросы