Javascript ES6 TypeError: конструктор класса Client не может быть вызван без 'new'

1

У меня есть класс, написанный на Javascript ES6. Когда я пытаюсь выполнить команду nodemon я всегда вижу эту ошибку. TypeError: Class constructor Client cannot be invoked without 'new'

Полная ошибка указана ниже:

/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45
        return (0, _possibleConstructorReturn3.default)(this, (FBClient.__proto__ || (0, _getPrototypeOf2.default)(FBClient)).call(this, props));
                                                                                                                              ^

TypeError: Class constructor Client cannot be invoked without 'new'
    at new FBClient (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45:127)
    at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:195:14)
    at Module._compile (module.js:641:30)
    at Object.Module._extensions..js (module.js:652:10)
    at Module.load (module.js:560:32)
    at tryModuleLoad (module.js:503:12)
    at Function.Module._load (module.js:495:3)
    at Module.require (module.js:585:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/routes/users.js:11:20)

То, что я пытаюсь сделать, я создал класс, а затем создал экземпляр этого класса. Затем я пытаюсь экспортировать эту переменную.

Структура класса определена ниже:

class FBClient extends FabricClient{

    constructor(props){
        super(props);
    }

<<< FUNCTIONS >>>

}

Как я пытаюсь экспортировать переменную ->

var client = new FBClient();
client.loadFromConfig(config);

export default client = client;

Здесь вы можете найти полный код> https://hastebin.com/kecacenita.js Код, созданный Babel> https://hastebin.com/fabewecumo.js

  • 0
    Я не уверен, что вы можете экспортировать экземпляр класса. Я думаю, что вы должны экспортировать класс, импортировать его в другой, а затем создать экземпляр там
  • 3
    @bwalshy - вы можете экспортировать любое значение, включая экземпляр класса.
Показать ещё 5 комментариев
Теги:
ecmascript-6

1 ответ

4
Лучший ответ

Проблема в том, что класс расширяет родной класс ES6 и передается в ES5 с помощью Babel. Переполненные классы не могут распространять родные классы, по крайней мере, без дополнительных мер.

class TranspiledFoo extends NativeBar {
  constructor() {
    super();
  }
}

приводит к чему-то вроде

function TranspiledFoo() {
  var _this = NativeBar.call(this);
  return _this;
}
// prototypically inherit from NativeBar 

Поскольку классы ES6 должны вызываться только с new, NativeBar.call приводит к ошибке.

Классы ES6 поддерживаются в любой последней версии Node, их не следует переписывать. es2015 следует исключить из конфигурации Babel, предпочтительнее использовать предустановку env для целевой цели node.

  • 1
    Знаете ли вы, как запустить нативный код ES6 в Nodejs?
  • 1
    Как говорится в ответе. Измените конфигурацию Babel, чтобы не переносить на ES5. За это поведение отвечает пресет es2015 .
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню