Javascript 来自字符串的ES6类实例
我尝试从字符串动态设置实例。我读了很多关于它的问题,但答案对我来说并不适用 它表示可以在名称之前使用Javascript 来自字符串的ES6类实例,javascript,string,instance,es6-class,Javascript,String,Instance,Es6 Class,我尝试从字符串动态设置实例。我读了很多关于它的问题,但答案对我来说并不适用 它表示可以在名称之前使用window来设置实例。它不起作用 class-MyClass{ //有用的东西 } let params={}; 让name='MyClass'; 让实例=新窗口[名称](参数); 我也尝试过在没有运气的情况下这样做(抛出错误): let instance=newwindow['MyClass'](参数); 然而,这是可行的: let instance=newmyclass(params)
window
来设置实例。它不起作用
class-MyClass{
//有用的东西
}
let params={};
让name='MyClass';
让实例=新窗口[名称](参数);
我也尝试过在没有运气的情况下这样做(抛出错误):
let instance=newwindow['MyClass'](参数);
然而,这是可行的:
let instance=newmyclass(params);
在这种情况下,为什么我不能使用
窗口
?还有其他想法吗?只有全局变量会自动放入窗口
创建从类名映射到类的对象:
const classMap = {
"MyClass": MyClass,
"MyClass2": MyClass2,
...
};
然后使用classMap[name](params)
而不是window[name](params)
只有全局变量才会自动放入窗口
创建从类名映射到类的对象:
const classMap = {
"MyClass": MyClass,
"MyClass2": MyClass2,
...
};
然后使用classMap[name](params)
而不是window[name](params)
如果它是全局变量,则只能使用window
。您必须在本地作用域而不是全局作用域中定义该类。@Barmar是的,我在另一个类的构造函数中。一种常见的方法是执行eval('var instance=new'+name+'))
。这些限制看起来类似于一个只有全局变量才能使用的窗口。您必须在本地作用域而不是全局作用域中定义该类。@Barmar是的,我在另一个类的构造函数中。一种常见的方法是执行eval('var instance=new'+name+'))
。这些限制看起来类似于