假设有一个 JavaScript 类,其代码定义如下:
var CustomClass =
{
Utils:
{
Parser: function(){ alert('constructor') }
},
Data:
{
}
};
var constructorClassName = "CustomClass.Utils.Parser";
最简单的实例创建方法是使用
eval()
:
var myObj;
eval('myObj=new ' + constructorClassName +'()')
但是,通过分析类名称的各个部分并使用中括号记号构建新对象,可以避免调用
eval()
:
function getter(str)
{
var obj = window;
var names = str.split('.');
for(var i=0;i<names.length;i++){
if(typeof obj[names[i]]=='undefined'){
var undefstring = names[0];
for(var j=1;j<=i;j++)
undefstring+="."+names[j];
throw new Error(undefstring+" is undefined");
}
obj = obj[names[i]];
}
return obj;
}
若要创建实例,可使用:
try{
var Parser = getter(constructorClassName);
var a = new Parser();
}catch(e){
alert(e);
}