有没有办法子类/继承/扩展javascript WebSocket?

时间:2015-08-20 16:44:16

标签: javascript inheritance websocket

我到处寻找,似乎没有任何问题,更不用说有关于此的答案了。

我尝试了多种方式,使用原型继承似乎是最好的方式

function MyWebSocket(url) {
  // do other stuff
  WebSocket.call(this, url);
}

MyWebSocket.prototype = Object.create(WebSocket.prototype);
MyWebSocket.prototype.constructor = MyWebSocket;
MyWebSocket.prototype.test = function () { alert('hi'); };

我可以单独分配测试功能但是在尝试覆盖使用者时我得到了错误" TypeError:无法构建' WebSocket':请使用' new&# 39;运算符,这个DOM对象构造函数不能作为函数调用"来自铬。

据我所知,这不是典型的javascript函数/对象,但我真的想要一种覆盖WebSocket构造函数的方法来启动其他维护函数,例如ping间隔,是的,我可以在onopen函数中单独执行此操作但这是我想要在网站上打开的所有WebSockets全局的。

谢谢大家!

1 个答案:

答案 0 :(得分:2)

以下内容对您有用:

function MyWebSocket(url) {
     this.ws = new WebSocket(url);

}

MyWebSocket.prototype.test = (function() { 
   // this = MyWebSocket.ws, i.e. a plain WebSocket obj
}).bind(MyWebSocket.ws);

var myWS = new MyWebSocket(url);
myWS.test(); // does something to the underlying websocket

或者,要对底层websocket执行某些操作,您无法使用bind,而只需在this.ws上定义函数时引用MyWebSocket.prototype