2009-10-21 8 views
0

J'ai une usine simple ci-dessous que je voudrais simplifier et ne pas être obligé de modifier chaque fois que j'ajoute un nouvel objet que je voudrais retourner. En Javascript, comment serais-je capable de créer un objet à l'exécution? MerciCréer un objet à l'exécution

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

Pourquoi dites-vous explicitement "à l'exécution"? Le seul moment où les objets sont créés est à l'exécution. – Jesper

Répondre

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

Merci. J'aime cette idée. – Steve

-2

vous pouvez utiliser la méthode eval par exemple,

eval retour ("nouveau "+ + de ligue" ScoreGrid();"); Eval évaluera le code lors de l'exécution et renverra l'objet.

+0

Je suis en train de développer en utilisant un framework TV qui empêche l'utilisation d'eval. – Steve

+0

eval est inutile ici –

+0

eval est mauvais et devrait être évité. – Jesper

1

Vous pouvez utiliser l'opérateur bracket pour rechercher le constructeur.

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

Je souhaite que cela fonctionne car cela semble être la solution la plus propre, mais malheureusement, j'utilise Javascript dans un environnement TV intégré et il n'y a pas d'objet de la fenêtre racine. – Steve

Questions connexes