2011-04-29 26 views
5

¿Cómo haría referencia a una variable local dinámica? Esto se logra fácilmente con una variable global:Cómo acceder a las variables locales dinámicas

myPet = "dog"; 
console.log(window["myPet"]); 

¿Cómo voy a hacer lo mismo en un ámbito local?


Específicamente lo que estoy tratando de hacer:

myArray = [100,500,200,800]; 
a = 1; // Array index (operand 1) 
b = 2; // Array index (operand 2) 

Dependiendo de la situación, quiero evaluar una B o b < < un

  • Para llevar a cabo esto, establecí dos variables: comparar1 y comparar2
  • Comparación1 hará referencia a cualquiera un o b y Comparación2 hará referencia a la otra
  • Evaluar Comparación1 < Comparación2 o viceversa

Los siguientes funciona perfectamente con las variables globales . Sin embargo, quiero a y b para ser local.

compare1 = "b"; compare2 = "a"; 
for(a=0; a<myArray.length; a++){ 
    b = a+1; 
    while(b>=0 && myArray[window[compare1]] < myArray[[compare2]]){  
    /* Do something; */ 
    b--; 
    } 
} 

Si en el anterior he de poner compare1=a entonces habría que restablecer Comparación1 cada vez que un cambiado. En cambio, quiero realmente [ver/señalar] el valor de a.

Respuesta

4

Utilice en su lugar un objeto en lugar de un conjunto de variables separadas. (No puedo pensar en una situación del mundo real en la que quieras utilizar una variable con nombre dinámico en la que no sea parte de un grupo lógicamente relacionado).

var animals = { dog: "Rover", cat: "Flopsy", goldfish: "Killer" }; 
var which = 'dog'; 
alert(animals[which]); 
+0

Esta respuesta logra exactamente lo que estoy tratando de hacer, gracias. Por el bien del argumento, ¿es posible hacer referencia dinámica a las variables locales? ¿A qué estarían apegados (como en global están adjuntos a 'ventana')? – Gary

+2

Las variables locales se agregan al "objeto de activación" que se crea para cada función que ingrese. Hasta donde yo sé, no hay forma de acceder al objeto de activación para acceder dinámicamente a sus miembros. --- Dmitry Soshnikov ha realizado muchas exploraciones y ha escrito bien en el interior de ECMAScript. Aquí hay un artículo que escribió que analiza cómo funciona el AO.Leer esto debería ponerlo en el camino para determinar si hay una manera o no: http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/#variable-object-in-function-context –

1

puede hacer referencia a una variable local a nivel mundial si es devuelto por una función.

function dog(name) { 

    var local = name; 

    return local; 

} 

myPet = dog('spike'); 

alert(myPet); 
1

Usted puede lograr esto con eval, sin embargo utilizar de eval es sumamente desalentador. Si puede discutir sus necesidades en la recomendación de David Dorward, lo haría:

var myPet = 'dog'; 
var dog = 'fido'; 

eval("alert(" + myPet + ")"); // alerts "fido" 
+0

Gracias Matt, eval es la única forma en que podría hacerlo, pero estaba tratando de evitarlo. – Gary

Cuestiones relacionadas