Lar*_*man 9 javascript safari prototype ecmascript-6 es6-class
我在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();
Run Code Online (Sandbox Code Playgroud)
类型错误:ws.doSomething 不是函数。(在 'ws.doSomething()' 中,'ws.doSomething' 未定义)
console.log('MyWebSocket.prototype')让我看到该功能已添加到原型中。其他一些内置类会发生这种情况,Animation它们是一个,但不会发生在其他类中Date,例如。
有没有人遇到过这个?这是 Safari 中的错误吗?任何建议表示赞赏!
是的,看起来像一个错误。该WebSocket构造可能是硬编码返回一个WebSocket实例。也不尊重Symbol.species。
作为一种解决方法,您可以使用以下方法:
class MyWebSocket extends WebSocket {
constructor(url) {
super(url);
Object.setPrototypeOf(this, MyWebSocket.prototype);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |