Ta till exempel en hypotetisk JavaScript-klass som definierats med följande kod:
var CustomClass =
{
Utils:
{
Parser: function(){ alert('constructor') }
},
Data:
{
}
};
var constructorClassName = "CustomClass.Utils.Parser";
Det enklaste sättet att skapa en instans är att använda
eval()
:
var myObj;
eval('myObj=new ' + constructorClassName +'()')
Du kan dock undvika anrop till
eval()
genom att tolka varje komponent av klassnamnet och skapa det nya objektet med hjälp av hakparenteser:
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;
}
Om du vill skapa instansen använder du:
try{
var Parser = getter(constructorClassName);
var a = new Parser();
}catch(e){
alert(e);
}