考虑下面的代码
class Test1 {
emit() {
console.log(2)
}
}
class Test extends Test1 {
test() {
console.log(1);
}
}
const a = new Test();
a.test()
巴别塔把这个代码翻译成这个
这在现代浏览器上运行得很好,但在Firefox43上就不行了
TypeError: a.test is not a function
我意识到:
- Babel将类扩展为Reflect.construct(如果平台支持Reflect)或上下文绑定
- Firefox43上的Reflect.construct(Super,arguments,NewTarget)跳过了NewTarget的原型
1.我们可以使用Reflect.construct将这个类扩展为以下形式:
const test = {};
test.__proto__ = {
test() {
console.log(1);
},
};
function Super() {
this.emit = function () {
console.log(2);
};
}
function Target() {}
Target.prototype = test.__proto__;
const result = Reflect.construct(Super, [test], Target);
result.test();
此外,我在closure compiler中找到了声明“brokenConstruct”的代码。
它指的是this issue
我做错了什么?我应该怎么做才能解决这个问题?
1条答案
按热度按时间ssm49v7z1#
我意识到这是火狐的bug。有来自core-js/modules/es的评论。