Проблема расширения нативных (es6) классов в Safari - PullRequest
4 голосов
/ 20 октября 2019

У меня проблемы с расширением собственного класса WebSocket с использованием классов es6.

Следующий фрагмент кода работает в 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 не является функцией. (В 'ws.doSomething ()', ws.doSomething 'не определено)

console.log('MyWebSocket.prototype') позволяет увидеть, что функция была добавлена ​​в прототип. Это происходит с несколькими другими встроенными классами, например, Animation, но не с другими, как, например, Date.

Кто-нибудь сталкивался с этим? Это ошибка в Safari? Любой совет приветствуется!

1 Ответ

2 голосов
/ 20 октября 2019

Да, похоже на ошибку. Конструктор WebSocket, вероятно, жестко задан для возврата экземпляра WebSocket. Это также не уважает Symbol.species.

В качестве обходного пути вы можете использовать что-то вроде этого:

class MyWebSocket extends WebSocket {
    constructor(url) {
        super(url);
        Object.setPrototypeOf(this, MyWebSocket.prototype);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...