Javascript 如何初始化名称基于变量的对象
我有一堆ob对象,我需要根据用户输入进行初始化,我的所有对象都基于相同的父对象,并且它们以相同的方式初始化。所以现在我有一些类似的东西:Javascript 如何初始化名称基于变量的对象,javascript,jquery,oop,Javascript,Jquery,Oop,我有一堆ob对象,我需要根据用户输入进行初始化,我的所有对象都基于相同的父对象,并且它们以相同的方式初始化。所以现在我有一些类似的东西: if (response['type'] === 'texteditor') { tmpObj = new Texteditor(response['theID'], response['type'], response['devicesView'], templateID); responseMarkup[0].addEventListene
if (response['type'] === 'texteditor') {
tmpObj = new Texteditor(response['theID'], response['type'], response['devicesView'], templateID);
responseMarkup[0].addEventListener("dblclick", tmpObj);
} else if (response['type'] === 'rectangle') {
tmpObj = new Rectangule(response['theID'], response['type'], response['devicesView'], templateID);
} else if (response['type'] === 'image') {
tmpObj = new MyImage(response['theID'], response['type'], response['devicesView'], templateID);
} else {
tmpObj = new Elements(response['theID'], response['type'], response['devicesView'], templateID);
}
因为我将要编码更多的对象,所以我想这样做:
tmpObj = new $[response['type']](response['theID'], response['type'], response['devicesView'], templateID);
var constructor = window[response['type']];
if( constructor ) {
tmpObj = new constructor(response['theID'], response['type'], response['devices'], templateID);
}
您可以使用Eval执行以下操作:
var objType = "Rectangule";
eval("tmpObj = new "+objType +"(response['theID'], response['type'], response['devicesView'], templateID);");
但正如政府所说:
不要使用eval
eval()是一个危险的函数,它执行传递的代码
以调用方的权限。如果使用字符串运行eval()
这可能会受到恶意方的影响,您最终可能会运行
用户计算机上具有您的权限的恶意代码
网页/分机。更重要的是,第三方代码可以看到
调用eval()的作用域,这可能导致可能的攻击
以类似功能不易受影响的方式
如果这些类在全局范围内,请尝试以下操作:
tmpObj = new $[response['type']](response['theID'], response['type'], response['devicesView'], templateID);
var constructor = window[response['type']];
if( constructor ) {
tmpObj = new constructor(response['theID'], response['type'], response['devices'], templateID);
}
如果它们不是,我想你必须使用邪恶的eval
,或者简单地将这些类嵌套在一个你可以访问的对象中,比如
var classes = {};
classes.Texteditor = function(){/* your code */};
classes.Rectangle = function(){/* your code */};
...
使用字典映射以下类型:
var objmap = {
'texteditor': TextEditor,
...
};
var tmpObj = new objmap[objtype](...)
它给了我这个错误:“未捕获的TypeError:对象不是函数”