我正在构建一个测量Websocket连接的时间。我需要将open范围绑定到服务器Object。但我也有time1,即从开始到结束连接的时间。 我想把time1放到Object上,它运行正常,但是我没有在bind函数中访问它。
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]对象,然后在这个绑定方法中访问它吗?
谢谢!
更新 *
您是否还可以告诉如何更改此功能以使其正常工作
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 )
}
}
答案 0 :(得分:2)
你必须像i
那样关闭Server[i].bind('open', function(i) {
return function() {
var time2 = new Date;
console.log(time2 - Server[i].time1)
}
}(i));
的值:
{{1}}
否则所有函数都会引用相同的变量。