Вавилонское наследство теряет прототип - PullRequest
0 голосов
/ 14 декабря 2018

Рассмотрим следующий код

const fooBar = parent => class extends parent {
  constructor() {
    super();
    this.foo = 1;
  }
  bar() {
    return 2;
  }
}

class FooBar extends fooBar(Object) {};

console.log(new FooBar());

Создает миксин fooBar и извлекает из него FooBar.Запуск этого кода, как и ожидалось, выдает FooBar { foo: 1 }.

Теперь давайте введем Бабеля.Я попробовал это с 6.xx и последним 7.2.Начиная с новой папки,

npm i @babel/core @babel/preset-env
echo { "presets": ["@babel/preset-env"] } > .babelrc
npx babel test.js > test2.js
node test2.js

Outputs { foo: 1 } - как мы видим, прототип потерян.Попытка вызвать bar на созданном экземпляре не удастся.

Это ошибка в Babel или я использую наследование неподдерживаемым способом?

Обновление: Iя получаю тот же результат, используя https://babeljs.io/en/repl, поэтому это не проблема для моей установки.

1 Ответ

0 голосов
/ 14 декабря 2018

Кажется, Бабель не очень хорошо поддерживает расширение нативных объектов.В Вавилоне 6 это не работает вообще, а в Вавилоне 7 он пытается обернуть нативы перед расширением их, но передача его через аргумент функции обходит проверку.

В этом случае простой class {} вместоObject будет достаточно.

Похожие вопросы / вопросы: https://github.com/babel/babel/issues/9183

...