Javascript绑定和这个

时间:2013-03-06 09:50:15

标签: javascript this bind

我正在构建一个测量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 )
        }
    }

1 个答案:

答案 0 :(得分:2)

你必须像i那样关闭Server[i].bind('open', function(i) { return function() { var time2 = new Date; console.log(time2 - Server[i].time1) } }(i)); 的值:

{{1}}

否则所有函数都会引用相同的变量。