Статический класс babeljs в конструкторе

Вопрос в том, как получить доступ к статическим свойствам класса из конструктора до вызова метода 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 выключен.

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"],
...
Другие вопросы по тегам