2009-02-22 3 views

Répondre

10

Faites de vos variables des membres d'un objet. Ensuite, vous pouvez utiliser [] pour accéder aux membres des objets en utilisant une chaîne:

var byname = { 
    divabc: ..., 
    divxyz: ... 
}; 

function someFunction(link) { 
    someOtherFunction(byname['div'+link]); 
} 

someFunction('abc'); // calls someOtherFunction(byname.divabc) 
2

Vous devriez pouvoir accomplir ceci avec la fonction 'eval'.

0

Comme wybiral dit, tout ce que vous avez besoin est eval:

someFunction(link) { 
    someOtherFunction(eval('(div' + link + ')'); 
} 

Fondamentalement, ce qu'il fait est évalue le contenu d'une chaîne sous forme de code. Évidemment, eval est un petit outil dangereux car il permet d'exécuter du code arbitraire, alors soyez prudent lorsque vous l'utilisez.

+0

Pouvez-vous expliquer la logique derrière l'intérieur le plus ensemble de parenthèses? –

+0

RyOnLife: Ils ne servent aucun objectif spécifique dans cet exemple, mais il est recommandé de mettre toutes vos chaînes d'évaluation entre parenthèses. Voici pourquoi: http://techiella.wordpress.com/2008/09/04/javascript-eval/ –

8

Pour ce type de construction/accès dynamique des noms de variables, vous devez utiliser la notation d'objets alternative où:

object.member === object["member"] 

De cette façon, vous pouvez construire votre nom de variable comme une chaîne et l'utiliser entre crochets pour accéder membres de l'objet.

3

eval le faire, mais cela indique généralement un autre problème avec le programme lorsque vous souhaitez synthétiser des identifiants comme celui-ci. Comme Ionut dit qu'il est préférable d'utiliser la notation []. J'aime faire un lien vers this chaque fois que des questions comme celle-ci se présentent.

1

Essayez ceci:

var divFoo = "bar"; 
function someFunction(link) { 
    someOtherFunction(this['div' + link]); 
} 
function someOtherFunction(value) { 
    alert(value); 
} 
someFunction("Foo"); 
Questions connexes