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

有没有办法子类化/继承/扩展javascript WebSocket?,javascript,inheritance,websocket,Javascript,Inheritance,Websocket,我到处都找过了,似乎没有任何问题,更不用说答案了 我尝试了多种方法,使用原型继承似乎是最好的方法 function MyWebSocket(url) { // do other stuff WebSocket.call(this, url); } MyWebSocket.prototype = Object.create(WebSocket.prototype); MyWebSocket.prototype.constructor = MyWebSocket; MyWebSocket.

我到处都找过了,似乎没有任何问题,更不用说答案了

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

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'运算符,此DOM对象构造函数不能作为函数从chrome调用

我知道这不是典型的javascript函数/对象,但我真的很想找到一种方法来覆盖WebSocket构造函数,以设置其他维护函数,如ping间隔,是的,我可以在onopen函数中单独执行,但这是我想要的,对于在地点


谢谢大家

类似于以下内容的内容可能适合您:

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
,而只能在
MyWebSocket.prototype
上定义函数时参考
this.ws
。现在您有了一个选择:要么将其聚合为属性,并通过适配器使用它,要么使用类似于
Object.setPrototypeOf(this.\uuuu proto\uuuuu,new WebSocket(url))的东西。请注意,Safari不支持后者。实际上,最好将其写成
Object.setPrototypeOf(Object.getPrototypeOf(this),new WebSocket(url))
。我希望第二种方法可以工作,但这会导致匿名函数出现问题(如事件函数的getter/setter)由于没有绑定到WebSocket,所以Chrome会抛出非法调用,Firefox会抛出“TypeError:'onmessage'setter”,对一个未实现接口WebSocket的对象进行调用,“我只想为它使用一个适配器。”。我想远离它,因为它非常冗长,而且它必须保持最新,甚至可能对WebSocket API进行微小的更改。希望我们不会经常看到这样的事情。谢谢你的帮助!是的,但是测试功能按照我的要求独立工作。这是我想要重写的构造函数。这与我最终要做的非常接近,谢谢你的帮助