由于 ES5 中的限制(对于 es2015-classes 插件来说),无法对子类(如 Date
,Array
,DOM
等)进行正确分类。 你可以尝试使用基于 Object.setPrototypeOf
和 Reflect.construct
的 babel-plugin-transform-builtin-extend 插件,但它同样也有些限制。
npm install --save-dev babel-plugin-transform-es2015-classes
.babelrc
(推荐).babelrc
// 未包含选项
{
"plugins": ["transform-es2015-classes"]
}
// 包含选项
{
"plugins": [
["transform-es2015-classes", {
"loose": true
}]
]
}
babel --plugins transform-es2015-classes script.js
require("babel-core").transform("code", {
plugins: ["transform-es2015-classes"]
});
loose
boolean
,默认为 false
。
请注意,在松散(loose)模式下,类方法是可枚举的。这并不符合规范,你可能会遇到问题。
松散模式下,方法是在类的原型上通过使用简单赋值的方式来替代定义的方式。这可能导致以下代码不能正常工作:
class Foo {
set bar() {
throw new Error("foo!");
}
}
class Bar extends Foo {
bar() {
// 当该方法已经被定义时,会引发错误
}
}
当定义了 Bar.prototype.foo
时,它会触发 Foo
上的 setter。这一般不太可能会出现在生产代码中,但需要记住(可能会出现问题)。