考虑以下代码
const fooBar = parent => class extends parent {
constructor() {
super();
this.foo = 1;
}
bar() {
return 2;
}
}
class FooBar extends fooBar(Object) {};
console.log(new FooBar());
它创建一个混合fooBar
并从中派生FooBar
。可以预期地运行此代码,将输出FooBar { foo: 1 }
。
现在让我们引入Babel。我在6.xx和最新的7.2中都尝试过。从一个新文件夹开始,
npm i @babel/core @babel/preset-env
echo { "presets": ["@babel/preset-env"] } > .babelrc
npx babel test.js > test2.js
node test2.js
输出{ foo: 1 }
-如我们所见,原型丢失了。尝试在创建的实例上调用bar
将会失败。
这是Babel中的bug,还是我以不受支持的方式使用继承?
更新:我使用https://babeljs.io/en/repl得到了相同的结果,因此安装似乎没有问题。
答案 0 :(得分:0)
Babel似乎不太支持扩展原生对象。在Babel 6中,这根本不起作用,在Babel 7中,它尝试在扩展本机之前将其包装,但是通过函数参数传递它会绕过检查。
在这种情况下,简单的class {}
而不是Object
就足够了。