2011-01-04 4 views
9

Javascript에서 eval()을 사용하지 않고 새로운 클래스를 동적으로 인스턴스화하고 인수를 전달하는 방법은 무엇입니까? 예를 들어 새 CatViewController를 만들고 "새끼 고양이"를 전달하려는 경우 어떻게해야합니까?동적 클래스 인스턴스화

var cat = new CatViewController("kitten"); 

감사 :

var myClassname = "CatViewController"; 
var cat = new myClassname("kitten"); 

그것은에 해결한다!

+1

@Chaos가보다 정확한 답변을 제공하기 위해 생성자 함수가 정의 된 방법과 위치를 표시해야합니다. 그의 일반적인 예는 일반적으로 어떻게 작동하는지 보여줍니다. – user113716

답변

8

는만큼 기능이 범위 내에있는이 작업을 수행 할 수 있습니다

var cat = new this[myClassname]("kitten"); 

또 다른 유사한 방법 :

var classes = { 
    A: function (arg) { 

    }, 
    B: function (arg) { 

    }, 
    C: function (arg) { 

    } 
}; 

var a = new classes["A"]("arg"); 
+1

'this == window'에서만 작동하고 var는 전역 범위에 있습니다. –

+0

@Matthew - 그건 정확하지 않습니다. 그것은 실제로 모든 범위 내에서 작동 할 수 있지만 범위 내에서 정의되어야합니다. – ChaosPandion

+0

this! = window 인 다른 클래스에서 인스턴스화하면 어떻게 될까요? – jaysonp

0

@Matthew - 당신이 window 범위 참조가있는 경우 당신이 잘되어야합니다 갈 거지? this 키워드 대신 window 참조를 사용하십시오. 나를 위해 일하는 것 같습니다. 그러나 현재 프로젝트에서 사용하고 있기 때문에이 접근법에 대한 단점이 있다면 매우 궁금합니다. Here is a demo 이전 데모를 기반으로합니다.

관련 문제