我无法使用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);
    }

09-16 15:15