#javascript #node.js
#javascript #node.js
Вопрос:
Возможно ли создать динамический класс без его предварительной загрузки? Я бы хотел избежать предварительной загрузки класса, поскольку я его динамически импортирую. Ниже приведен пример кода, который иллюстрирует, чего я пытаюсь достичь:
import(namespace).then((DynamicClass) => {
var classInstance = new DynamicClass();
}
В настоящее время это приводит к:
(узел: 962) Необработанное promiserejectionwarning: ошибка типа: dynamicClass не является конструктором
Когда я утешаю.зарегистрируйте DynamicClass, он показывает:
{ default: [Function: DynamicClass] }
Класс определяется следующим образом:
namespace/index.js
class DynamicClass extends BaseClass {
//...
}
module.exports = DynamicClass;
Комментарии:
1. Если это не конструктор, что это такое? Должен быть первый последующий вопрос, с которого начинается отладка.
2. @Taplar обновил вопрос с более подробной информацией, чтобы проиллюстрировать полный вариант использования.
3. Так
dynamicClass.default
может быть конструктор4. @Taplar это сделало свое дело. Не могу поверить, что я это пропустил…
Ответ №1:
Похоже, ваша проблема связана с неправильным пониманием модулей и менее используемым синтаксисом динамического импорта. Вы не импортируете класс, вы импортируете модуль ES. Вы можете использовать импортированный модуль для доступа к экспортируемым значениям модуля с помощью соответствующего вызова в зависимости от того, является ли желаемое значение экспортом по умолчанию или нет.
Если ваш модуль экспортирует класс по умолчанию, например
export default class Class(){...}
Вы должны использовать функцию default(), доступную в модуле, чтобы получить определение класса для инициализации.
const module = await import("module-name")
const obj = new module.default();