如何对导出的构造函数使用await import()?

Dsh*_*hiz 3 javascript import node.js async-await es6-modules

我将此作为我的函数构造函数:

测试.js

const myConstructor = function(){
  this.hi = 'hi'
  console.log(this.hi)
}
export default myConstructor
Run Code Online (Sandbox Code Playgroud)

我正在await import()test2.js 中尝试:

测试2.js

const test = await import('./test.js')

new test()
Run Code Online (Sandbox Code Playgroud)

这失败了TypeError: test is not a constructor

但是,如果我正常导入它,它就可以正常工作:

测试2.js

import test from './test.js'
//const test = await import('./test.js')

new test()
Run Code Online (Sandbox Code Playgroud)

^^ 打印hi到控制台。

这里发生了什么?为什么这两种方法对于构造函数的行为如此不同?对于正常功能来说,这似乎不会发生。

我必须通过直接在构造函数模块内调用构造函数来解决这个问题,但这并不理想。

Cer*_*nce 6

动态导入返回

它返回一个承诺,该承诺满足一个包含 moduleName 的所有导出的对象,其形状与命名空间 import ( ) 相同import * as name from moduleName:一个具有 null 原型的对象,并且默认导出可用作名为 default 的键。

如果它的 Promise 仅解析为默认导出,您将无法使用它可能具有的任何命名导出。所以,你需要:

const testNamespace = await import('./test.js')

new testNamespace.default()
Run Code Online (Sandbox Code Playgroud)