2011-04-13 4 views
6

자바 스크립트에서 해당 이름의 객체를 가져오고 싶습니다. 일부 다른 컨텍스트를로드해야하는 응용 프로그램에서 작업 중이므로 "상속"jquery 플러그인을 사용하여 다른 클래스를로드하려고합니다. 모든 것은 잘 동작합니다. 클래스를 인스턴스화해야 할 때, 클래스의 이름 만 있고 객체는 직접적으로 가졌기 때문에 할 수 없습니다.자바 스크립트의 문자열 이름에서 객체 클래스 가져 오기

기본적으로 'getClass (String name)'과 같은 것을 찾고 싶습니다. 누구든지 나를 도울 수 있습니까?

+0

확인) (그 바보지만, 왜 '평가를 사용하여 않습니다 내 오브젝트 할 트릭 ...이 쓸모없는 게시물에 대한 죄송합니다 ... – Celero

답변

10

eval()을 사용하지 마십시오.

var classes = { 
    A: <object here>, 
    B: <object here>, 
    ... 
}; 

을 한 후 단지 그들을 찾아 :

당신은지도에 클래스를 저장할 수

new classes[name]() 
+0

의 이름') (평가 '기능을을 사용하여 '틀렸어? 나는 이런 식으로 할 수 없다. "클래스"는 일반적이며 일부 특정 컨텍스트에서로드되어야한다. 다음과 같은 맵을로드 할 수 없다 ... – Celero

+0

@Celero :'eval()'을 사용할 수 있기 때문에 보안 위험이 될 수있는 임의의 코드를 실행합니다. 그것은 당신이 필요로하는 것보다 훨씬 더 많은 힘을 제공합니다. 왜지도를 사용할 수 없습니까? 제네릭이란 무엇을 의미하며 어떤 상황에 대해 이야기하고 있습니까? 더 많은 정보를 제공해 주시면보다 나은 정보를 제공 할 수 있습니다. –

+0

내가 entierly 잘못했다, 당신의 트릭을 내가 필요로 적용 할 수 있습니다. 감사 ! – Celero

5

JavaScript: Call Function based on String을 :

function foo() { } 
this["foo"](); 
+0

이것은 기본적으로 eval()과 동일합니까? – Celero

+0

@Celero - no. 전역 코드로 실행, * this *는 gobal/window 객체를 참조하므로 * window [ 'foo'] *와 같습니다. 다른 범위에서 사용하는 경우, * * *가 어떤 참조인지 모를 수도 있습니다. 그것은 ** 가변 해상도 체인의 객체 위에 놓이기를 원하는 범위의 변수 또는 활성화 객체 (즉, 실행 컨텍스트)를 ** 참조하지 않습니다. – RobG

+0

귀하의 정확성에 감사드립니다. – Celero

0

는 당신이 이것을 의미합니까?

function Person(name){ 
    this.name = name; 
} 

function getClass(str_name, args){ 
    return new (window[str_name])(args); 
} 

var wong2 = getClass("Person", "wong2"); 

alert(wong2.name); // wong2 
+0

아니요, 일부 클래스 중에서 상속을 사용하는 클래스가 있습니다. 특정 케이스에서 한 번에 하나씩 만로드하면됩니다. 그래서 eval()이 나에게 잘 어울리는 이유는 ... – Celero

+0

@celero가 예제를 줄 수 있습니까? 어쩌면 어떤 코드일까요? – wong2

+0

죄송 합니다만, 어쨌든 펠릭스 클링 기법을 사용해보고 ... 도움을 주셔서 감사합니다. – Celero

관련 문제