如何在ES6中访问导入模块的上下文?

时间:2017-11-22 13:55:33

标签: javascript es6-modules

我的术语可能会混淆,但与我通过window访问全局上下文的方式相同,我想访问导入模块的当前上下文。

举一个简单的例子说明我正在做的事情,假设我们有一个名为MyClasses.js的文件,其中包含以下两个类:

export class MyClass1 {}
export class MyClass2 {}

然后我们将所述类导入名为main.js

的文件中
import {MyClass1, MyClass2} from './MyClasses'

main.js中,我可以根据某个属性值构造每个类的新实例。

function main()
{
    const config = { case1: 'MyClass1', case2: 'MyClass2', case3: 'MyClass1' };

    const myPropValue = 'case3';
    const constructorName = config[myPropValue];
    const myClass = new context[constructorName](); // MyClass1
}

这是一个基本的例子,但是在构建这样的类的类和案例很多的情况下,我想映射关系而不是依赖于错综复杂的if / else逻辑。

一种解决方案是将导入的类附加到window上下文...

window.MyClass1 = MyClass1;
window.MyClass2 = MyClass2;

...并从那里构建我的类的实例:

const myClass = new window[constructorName](); // valid construction

但我想避免将这些绑定到全球范围。是否有任何导入模块的默认上下文,或者我是否需要自己设置上下文?

1 个答案:

答案 0 :(得分:2)

只需修改您的导入即可:

import * as MyClasses from './MyClasses';