다음 코드로 정의된 가상 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);
}