从javascript中的字符串获取导出的单例实例

从javascript中的字符串获取导出的单例实例,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个ExampleView类,应该是singleton。在这个类中,我有一个方法render,我想通过对象名'ExampleView'从另一个js文件调用它。 代码如下: import View from './view'; class ExampleView extends View { render() { return `<span>Test</span>`; } } export default new ExampleView

我有一个
ExampleView
类,应该是singleton。在这个类中,我有一个方法
render
,我想通过对象名'ExampleView'从另一个js文件调用它。 代码如下:

import View from './view';

class ExampleView extends View {
    render() {
        return `<span>Test</span>`;
    }
}
export default new ExampleView(); //<- exporting as singleton and this object I try to get via it's name
问题是,我找不到任何方法从name获取
ExampleView
实例,但我的
ExampleView
类需要是一个单例

我知道我可以用下面的方法来做,然后通过
window['ExampleView']调用它。render()

ExampleView={
render:function(){
返回'Test';
}
}
但我真的需要用模块化ES6实现它


你能解释一下我应该做什么吗?

填充全局范围不是ES6的方式。我想你可以这样对你的
导出

//
// Class definition
//
window.ExampleView = new ExampleView();

export default window.ExampleView;

您只需导入实例

import whateverYouWantToCallYourViewInstance from './ExampleView'

// snip

return whateverYouWantToCallYourViewInstance.render();
它将是同一个对象



值得注意的是:单身是邪恶的。使用ES模块系统传递实例有点滥用

这是可以接受的解决方案,因为在窗口中创建对象引用允许稍后通过字符串获取此实例。谢谢是 啊但我不鼓励这种方法。这只是针对你的特殊用例。我可能会将这个对象引用移动到我的专用全局对象,而不是使用窗口。你为什么不鼓励这种方法?这是个坏主意吗?你们能提供你们将根据我的问题实施的解决方案吗?正如我告诉你们的,对于你们的要求,这可能是唯一的解决方案。当我们以面向对象的方式构建东西时,填充全局范围并不是我想做的事情,这正是模块体系结构存在的原因。您可以简单地在不同的文件中导入相同的类实例。我不会把我的应用程序架构成按名称调用模块。对于您正在尝试做的事情,可能还有其他解决方案。为什么要按名称调用模块?
//
// Class definition
//
window.ExampleView = new ExampleView();

export default window.ExampleView;
import whateverYouWantToCallYourViewInstance from './ExampleView'

// snip

return whateverYouWantToCallYourViewInstance.render();