从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();