我正在使用具有以下事件的Websocket(javascript):

    ctrlScope.conn.onerror = function() {
      ctrlScope.updateStatus();
    };

    ctrlScope.conn.onclose = function() {
      ctrlScope.updateStatus();
    };

    ctrlScope.conn.onopen = function() {
      ctrlScope.updateStatus();
    };


如您所见,我正在使用这些事件更新聊天状态,但看起来是重复的,有没有办法将所有这些Websocket事件组合在一起?

ctrlScope.conn[onError][onClose][onOpen] = function() {
   ctrlScope.updateStatus();
};


此外,还有一个Websocket变量:readyState,它提供与事件相同的连接状态。这可以代替麻烦的功能,但是$ watch不能使用它。

请一些帮助:(

最佳答案

我没有尝试过这段代码,但是理论上您可以这样写:

var handlers = ["onerror","onclose","onopen"];
for(var i=0;i<handlers.length;i++){
    ctrlScope.conn.[handlers[i]] = ctrlScope.updateStatus;
};


这是利用javascript的能力来使用点表示法(ctrlScope.conn.onopen)或数组表示法(ctrlScope.conn [“ onopen”])来引用元素的功能。

10-07 23:54