Странная проблема наследования «не может быть вызвана без« нового »» - PullRequest
0 голосов
/ 14 ноября 2018

Я думал, что вчера выяснил это, но, по-видимому, не понял, и после еще одного полного дня попыток выяснить это, я снова прошу помощи.

У меня есть модуль, который "установлен"через npm link, который написан на ES6.Существует класс, который я экспортирую, называется Perishable.Я сократил класс до минимума, если проблема все еще существует.

export default class Perishable {
    constructor() {

    }
}

Я пытаюсь расширить класс, и я делаю это так:

// Perishable is imported already and IS NOT NULL. 
export default class Apple extends Perishable {
    constructor() {
        super()
    }
}

При вызове new Apple() я получаю следующую ошибку: Class constructor Perishable cannot be invoked without 'new'

Однако я могу напрямую создать новый класс скоропортящихся через new Perishable() без проблем.


Добавить наэто, копирование + вставка класса в тот же каталог и импортирование его с использованием относительного пути позволяет мне правильно вызвать new Apple().Я считаю, что это связано с тем, как webpack / babel переносит символьный класс.Это то, что я получаю при проверке переданного кода: класса с символическими ссылками

var Apple = function (_Perishable) {
    _inherits(Apple,  _Perishable);

    function Apple() {
        _classCallCheck(this, Apple);

        return _possibleConstructorReturn(this, (Apple.__proto__ || Object.getPrototypeOf(Apple)).call(this));
    }

    return Apple;
}(_idleEngine.Perishable);

Это то, что я получаю, когда проверяю код локального класса (который работает правильно).

var Apple = function (_Perishable) {
    _inherits(Apple, _Perishable);

    function Apple() {
        _classCallCheck(this, Apple);

        return _possibleConstructorReturn(this, (Apple.__proto__ || Object.getPrototypeOf(Apple)).call(this));
    }

    return Apple;
}(_Perishable3.default);

Единственное различие между двумя сгенерированными кодами состоит в том, что находится в конце curlies, один - (_idleEngine.Perishable), а другой - (_Perishable3.default).

console.log(Perishable) возвращает одно и то же для обоих типов импорта, а new Perishable() прекрасно работает для обоих типов импорта.


Я должен добавить, что класс символической ссылки импортируется через npm link и класс local, который я только что скопировал + вставил из библиотеки, чтобы он находился в той же папке, что и класс Apple.


РЕДАКТИРОВАТЬ: Кажется, это проблема только с syslinked модулями, так какпубликация модуля «исправила» проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...