2009-12-17 11 views
54
<script> 
//in one script 
var someVarName_10 = 20; 
</script> 

Deseo obtener acceso a esta variable desde otra secuencia de comandos por nombre de la variable. Con window object es simple, ¿es posible con la variable local?Obtiene la variable global de forma dinámica por el nombre de la cadena en JavaScript

me refiero a acceder a este var por código como este:

<script> 
    alert(all_vars['someVar' + 'Name' + num]); 
</script> 
+1

Su muestra muestra una variable global. ¿Desea saber si puede acceder desde un ámbito local? –

+0

Realmente depende de lo que quiere decir con 'alcance local' .. Las funciones de Javascript tienen un alcance solo para funciones, no bloques o incluso archivos –

+0

posible duplicado de [¿Hay alguna manera de acceder a una variable de JavaScript usando una cadena que contiene el nombre de la variable?] (http://stackoverflow.com/questions/1441532/is-there-a-way-to-access-a-javascript-variable-using-a-string-that-contains-the-n) – Gilles

Respuesta

81

¿Desea hacer algo como esto?

<script> 
//in one script 
var someVarName_10 = 20; 

alert(window["someVarName_10"]); //alert 20 

</script> 

actualización: porque OP editado la pregunta.

<script> 
    num=10; 
    alert(window['someVar' + 'Name_' + num]); //alert 20 
</script> 
+0

lo siento, estaba equivocado, pensé que los vars no están en la ventana, gracias –

+0

de nada. – YOU

+4

No me importa lo que OP * en realidad * quería. Me importa el título en cuestión y, por lo tanto, se convierte en resultado de Google en mis búsquedas. –

-5

Si esto es lo que dijo:

<script type="text/javascript"> 
var hello = 'test'; 
</script> 
<script type="text/javascript"> 
    alert (hello); 
</script> 

Funciona porque la escritura son finalmente disponible para el documento y se puede acceder a su vars.

30

Me he dado cuenta de que todo el mundo está aconsejando la creación global de var esto dará lugar a variables de escape al espacio de nombres global. Cuando dinámicamente la creación de nombres de clases o sólo las variables que es fácil de mantener em locales:

this['className'] = 123; 

o

this['varName'] = 123; 

Nombre de espaciamiento se vería así:

vars = {}; 
vars['varName'] = 123; 
vars.varName // 123 
+1

'var this ['className'] = 123;' me parece un error de sintaxis. –

+0

tiene razón, no sé por qué agregué var –

+1

Esta es mejor que la respuesta aceptada. Más descriptivo sobre cómo funciona esta función en los ámbitos de clase. –

9
<script> 
    var someVarName_10 = 20; 
    var num = 10; 
    alert(eval('someVar' + 'Name_' + num)); //alert 20 
</script> 
+0

'eval' funcionó mejor para mí! pero úsalo con precaución – papaiatis

1

así , para el propósito de depuración solo, podría haz algo como esto Lo uso durante el desarrollo de clases, donde algunas variables deben permanecer privadas (var). este trabajo incluso en la variable local (y mundial de la maldición)

function MYCLASS(){ 
    var a=1, b=2, c=3; 
    this.public = "variable"; 
    this.debug = function(sVar){ 
     return eval(sVar); 
    } 
} 

var myThing = new MYCLASS(); 
myThing.debug('a') //return 1 
myThing.debug('b') //return 2 
myThing.debug('c') //return 3 
Cuestiones relacionadas