1

問題は、スーパーメソッドが呼び出される前にコンストラクター内からクラスの静的プロパティにアクセスする方法です。

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

私はすでに約1年前にこの質問をしました。今のところ、提供されているソリューションは実行できません。

コードはbabel consoleで試すことができます。興味深いのは、このコードは、babel がなくても (最新の Chrome などで)、es2015チェックボックスがオフの場合に正常に動作することです。

4

1 に答える 1

1

これは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"],
...
于 2016-08-26T06:46:59.620 に答える