95 votes

Javascript utilise variable comme nom d'objet

Je veux 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';
 

130voto

Shaz Points 7458

Global:

 var objname = {};
var someObject = "objname";
window[someObject].value = "value";
 

Local:
Les variables locales sont un peu plus difficiles, mais je pense avoir trouvé la solution:

 (function() {
    if (this != arguments.callee) {
        arguments.callee.call(arguments.callee);
        return false;
    }

    this.objname = {};
    var someObject = "objname";
    this[someObject].value = "value";

    console.log(this.objname);
})();
 

9voto

JW. Points 17361

Est-ce une variable globale? Si c'est le cas, ils font en réalité partie de l'objet window , vous pouvez donc faire window[objname].value .

Si c'est local à une fonction, je ne pense pas qu'il existe un bon moyen de faire ce que vous voulez.

8voto

Sean Vieira Points 47080

L'objet existe dans une certaine étendue, de sorte que vous pouvez presque toujours accéder à la variable par le biais de cette syntaxe:

var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';

Le seul endroit où ce qui est difficile, c'est quand vous êtes dans un champ d'application restreint et que vous souhaitez accéder à un niveau supérieur de variable locale. Lorsque vous avez quelque chose comme ceci:

(function(){
    var some_variable = {value: 25};
    var x = "some_variable";
    console.log(this[x], window[x]); // Doesn't work
})();

Vous pouvez le contourner en utilisant eval au lieu d'accéder à l'étendue actuelle de la chaîne ... mais je ne le recommande pas, sauf si vous avez fait beaucoup de tests et vous savez que c'est la meilleure façon d'aborder les choses.

(function(){
    var some_variable = {value: 25};
    var x = "some_variable";
    eval(x).value = 42;
    console.log(some_variable); // Works
})();

Votre meilleur pari est de disposer d'une référence à un nom dans un toujours-va-à-être-là de l'objet (comme this dans la portée globale ou privé de haut niveau variable dans une portée locale) et mettre tout le reste.

Donc:

var my_outer_variable = {};
var outer_pointer = 'my_outer_variable';
// Reach my_outer_variable with this[outer_pointer]
// or window[outer_pointer]

(function(){
    var my_inner_scope = {'my_inner_variable': {} };
    var inner_pointer = 'my_inner_variable';
    // Reach my_inner_variable by using
    // my_inner_scope[inner_pointer]
})();

7voto

Midas Points 2871

Vous pouvez utiliser eval :

 eval(variablename + ".value = 'value'");
 

6voto

Neil Points 24938

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';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X