2009-10-21 6 views
0

나는 단순한 공장을 가지고 있으며, 단순화하고 반환하고자하는 새 객체를 추가 할 때마다 수정할 필요가 없다. Javascript에서는 런타임에 객체를 어떻게 만들 수 있습니까? 감사합니다런타임에 객체 생성

switch (leagueId) { 
    case 'NCAAF' : 
     return new NCAAFScoreGrid(); 
    case 'MLB' : 
     return new MLBScoreGrid(); 
    ... 
} 
+0

왜 "at runtime"이라고 명시 적으로 말하고 있습니까? 객체가 생성되는 유일한 시간은 런타임입니다. – Jesper

답변

6
var leagues = { 
    'NCAAF': NCAAFScoreGrid, 
    'MLB': MLBScoreGrid, 
    // ... 
}; // maybe hoist this dictionary out to somewhere shared 

if (leagues[leagueId]) { 
    return new leagues[leagueId](); 
} 
// else leagueId unknown 
+0

감사합니다. 나는이 아이디어를 좋아한다. – Steve

-2

당신은 예를 들어 평가 방법을 사용할 수 있습니다,

반환 평가 ("새로운"+ leagueId + "ScoreGrid();");

eval은 런타임에 코드를 평가하고 객체를 반환합니다.

+0

저는 실제로 eval을 사용하지 못하게하는 TV 프레임 워크를 사용하여 개발하고 있습니다. – Steve

+0

eval은 불필요합니다. –

+0

eval은 악의가 없으므로 피해야합니다. – Jesper

1

브래킷 연산자를 사용하여 생성자를 조회 할 수 있습니다.

new (window[leagueId + 'ScoreGrid'])(...); 
+0

이것이 가장 깨끗한 해결책 인 것처럼 보이기를 바랍니다. 그러나 불행히도 임베디드 TV 환경에서 Javascript를 사용하고 있으며 루트 창 개체가 없습니다. – Steve

관련 문제