Babeljs类的静态构造函数

babeljs class static in constructor

本文关键字:构造函数 静态 Babeljs      更新时间:2023-09-26

问题是如何在调用 super方法之前从构造函数内部访问类静态属性 ?

class A
{
    constructor(input) {
        console.log('A', typeof new.target);
    }
}
class B extends A
{
    static template = '';
    constructor() {
        console.log('B', typeof new.target);
        super();
    }
}
class C extends B
{
    static template = 'CCC';
}
new C();

因为某些原因我得到了:

B undefined
A undefined
不是

B function
A function
我一年前就问过这个问题了。目前,其中提供的解决方案已不再可行。

您可以在babel控制台中尝试代码。有趣的部分是,这段代码工作得很好,没有babel(例如在最新的Chrome),当es2015复选框关闭。

这似乎是通天塔中的一个bug。我写了一个小插件来编译new.target:

https://github.com/vbarbarosh/babel_plugin_transform_es2015_newtarget

$ npm install --save-dev git://github.com/vbarbarosh/babel_plugin_transform_es2015_newtarget
$ cat .babelrc
...
    "plugins": ["transform-es2015-newtarget"],
...