我无法使用es6类扩展 native WebSocket
类。
以下代码可在Chrome和Firefox上运行,但不能在Safari上运行:
class MyWebSocket extends WebSocket {
doSomething() {
console.log('hi');
}
}
let ws = new MyWebSocket('wss://127.0.0.1:4000');
ws.doSomething();
console.log('MyWebSocket.prototype')
让我看到该函数已添加到原型(prototype)中。这是在其他一些内置类中发生的,
Animation
是其中一个,但其他类则没有,例如Date
。有人碰到这个吗?这是Safari中的错误吗?任何建议表示赞赏!
最佳答案
是的,看起来像个 bug 。 WebSocket
构造函数可能已硬编码以返回WebSocket
实例。它也不尊重Symbol.species
。
作为解决方法,您可以使用以下方法:
class MyWebSocket extends WebSocket {
constructor(url) {
super(url);
Object.setPrototypeOf(this, MyWebSocket.prototype);
}