次のコードで定義する仮定の 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);
}