2009-10-21 68 views
0

我在下面有一個簡單的工廠,我想簡化並且不需要每次添加我想要返回的新對象時進行修改。在Javascript中,我將如何能夠在運行時創建一個對象?由於在運行時創建對象

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

爲什麼你明確地說「在運行時」?唯一的時間對象是在運行時創建的。 – Jesper 2009-10-21 21:10:08

回答

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 2009-10-21 17:45:11

-2

可以使用例如eval方法,

回報的eval( 「新的 」+ leagueId +「 ScoreGrid();」);

eval將在運行時評估代碼並返回該對象。

+0

我實際上正在開發使用防止使用eval的電視框架。 – Steve 2009-10-21 17:40:54

+0

eval在這裏是不必要的 – 2009-10-21 17:53:38

+0

eval是邪惡的,應該避免。 – Jesper 2009-10-21 21:11:01

1

您可以使用括號運算符來查找構造函數。

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

我希望這工作,因爲這似乎是最乾淨的解決方案,但不幸的是我在嵌入式電視環境中使用JavaScript,並沒有根窗口對象。 – Steve 2009-10-21 18:13:52