在 Safari 中扩展本机 (es6) 类 时出现问题

Problem extending native (es6) classes in Safari

我在使用 es6 classes 扩展本机 WebSocket class 时遇到问题。

以下代码适用于 Chrome 和 Firefox,但不适用于 Safari:

class MyWebSocket extends WebSocket {
    doSomething() {
        console.log('hi');
    }
}

let ws = new MyWebSocket('wss://127.0.0.1:4000');
ws.doSomething();

TypeError: ws.doSomething is not a function. (In 'ws.doSomething()', 'ws.doSomething' is undefined)

console.log('MyWebSocket.prototype') 让我看到函数已添加到原型中。 这发生在其他一些内置的 classes 中,Animation 是一个,但其他的则不会,例如 Date

有人 运行 参与其中吗?这是 Safari 中的错误吗?任何建议表示赞赏!

是的,看起来像一个错误。 WebSocket 构造函数可能被硬编码为 return 一个 WebSocket 实例。它也不尊重 Symbol.species

作为解决方法,您可以使用类似这样的方法:

class MyWebSocket extends WebSocket {
    constructor(url) {
        super(url);
        Object.setPrototypeOf(this, MyWebSocket.prototype);
    }