babeljs class 在构造函数中是静态的

babeljs class static in constructor

问题是如何从构造函数 before 中访问 class 静态属性调用了 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

already asked this question 大约一年前。目前,里面提供的解决方案已经行不通了。

您可以试试babel console中的代码。有趣的是这段代码在没有 babel 的情况下工作正常(例如在最新的 Chrome 中),并且当 es2015 复选框关闭时。

这似乎是 babel 中的一个错误。我写了一个小插件,可以转译 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"],
...