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