我到处都看过了,似乎没有关于这个的任何问题更不用说答案了。

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

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对象构造函数不能作为函数调用”铬。

我知道这不是您的典型javascript函数/对象,但是我真的很想一种方法来重写WebSocket构造函数以启动其他维护函数,例如ping间隔,是的,我可以在onopen函数中单独进行此操作,但这是我只想对网站上打开的所有WebSocket通用。

感谢大家!

最佳答案

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

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

09-26 06:26