Je souhaite utiliser la valeur d'une variable pour accéder à un objet.
Disons que j'ai un objet nommé myobject.
Je veux remplir une variable avec ce nom et utiliser la variable pour accéder à l'objet.
Exemple:
var objname = 'myobject';
{objname}.value = 'value';
javascript
PeeHaa
la source
la source
alert(this === window)
.window
objet appeléobjname
qui est ensuite référencé parthis
... vous pouvez remplacerwindow
parthis
dans le second exemple et tout fonctionne encore. :-)arguments.callee
est obsolète, mais c'est néanmoins une implémentation très intelligente - et cela n'empiète pas sur la portée mondiale. +1objname
comme une propriété de la fonction elle-même. Il peut échouer pour les fonctions récursives. Je ne sais pas comment cela peut être utilisé dans le monde réel.Utilisez un crochet autour du nom de la variable.
la source
Est-ce une variable globale? Si tel est le cas, ils font en fait partie de l'
window
objet, vous pouvez donc le fairewindow[objname].value
.Si c'est local à une fonction, je ne pense pas qu'il y ait un bon moyen de faire ce que vous voulez.
la source
L'objet existe dans une certaine portée, vous pouvez donc presque toujours accéder à la variable via cette syntaxe:
Le seul endroit où cela devient délicat est lorsque vous êtes dans une portée fermée et que vous souhaitez accéder à une variable locale de niveau supérieur. Lorsque vous avez quelque chose comme ça:
Vous pouvez contourner cela en utilisant à la
eval
place pour accéder à la chaîne de portée actuelle ... mais je ne le recommande pas à moins que vous n'ayez fait beaucoup de tests et que vous savez que c'est la meilleure façon de faire les choses.Votre meilleur pari est d'avoir une référence à un nom dans un objet qui va toujours être là (comme
this
dans la portée globale ou une variable de premier niveau privée dans une portée locale) et d'y mettre tout le reste.Donc:
la source
Vous pouvez utiliser
eval
:la source
eval
considéréevil
? Sinon, je pourrais l'utiliser. Parce que c'est un global en ce moment mais je voulais le déplacer dans une fonction pour nettoyer les choses.eval
pouvant s'exécuter.eval
, à mon avis. Nous devons cependant nous assurer que la variable est propre.myVar[objname].value
?Vous ne pouvez pas faire cela en général, sauf au niveau de la fenêtre, où vous pouvez écrire
window[objname].value = 'value';
la source
Je pense que la réponse de Shaz pour les variables locales est difficile à comprendre, bien qu'elle fonctionne pour les fonctions non récursives. Voici une autre façon dont je pense que c'est plus clair (mais c'est toujours son idée, exactement le même comportement). Il n'accède pas non plus aux variables locales de manière dynamique, mais uniquement à la propriété de la variable locale.
Essentiellement, il utilise une variable globale (attachée à l'objet de fonction)
Ce qui revient essentiellement à créer un global pour stocker la variable, afin que vous puissiez y accéder en tant que propriété. Créer un global pour ce faire est un tel hack.
Voici un hack plus propre qui ne crée pas de variables globales, il utilise une variable locale à la place.
Voir Javascript: interpréter la chaîne comme référence d'objet?
la source
Lorsque vous utilisez la fenêtre [nom_obj], veuillez vous assurer que le nom_obj est une variable globale. Sinon, cela fonctionnera parfois et échouera parfois. window [nom_obj] .valeur.
la source
Si l'objet est dans un espace de noms, c'est-à-dire.
Company.Module.Components.Foo
vous pouvez utiliser cette fonction:CoffeeScript:
Résultat Js:
Ensuite, vous pouvez créer un nouvel objet ou faire n'importe quoi. Notez les parenthèses.
Cette idée est empruntée à une question similaire: comment exécuter une fonction JavaScript quand j'ai son nom sous forme de chaîne
la source
L'un des défis que j'ai eu avec les réponses est qu'il supposait que l'objet était un seul niveau. Par exemple,
fonctionne bien, mais
ne marche pas.
Ce que j'ai fini par faire, c'est créer une fonction pour accéder aux objets à plusieurs niveaux:
Dans le deuxième scénario, je peux alors passer la chaîne à cette fonction pour récupérer l'objet que je recherche:
la source
Vous pouvez définir une propriété d'objets de cette façon:
la source
Si vous connaissez déjà la liste des noms de variables possibles, essayez de créer un nouvel objet (iconObj) dont le nom des propriétés est le même que les noms d'objet, ici dans l'exemple ci-dessous, la variable iconLib contiendra deux valeurs de chaîne, soit 'ZondIcons' ou 'MaterialIcons' . propertyName est la propriété de l'objet ZondIcons ou MaterialsIcon.
la source
-> [quelque chose: {somethingElse: 'test'}];
la source
la source