Comunidad de diseño web y desarrollo en internet online

variables dinamicas this['variable'] para evitar funcion eval

Citar            
MensajeEscrito el 23 May 2012 05:37 pm
Bien mi pregunta era utilizar las variables dinamicas de la misma manera que se hace en actionscript3 y para mi sorpresa eso funciona, asi que puedo reducir el codigo de manera extrema
la idea era acceder a los nombres de las variables desde una creacion de los nombres de esas variables desde un bucle

Código :

//imaginemos 
var a01=24;
var a02=34;
var a03=78;
var a04=98;
//ahora vamos a acceder a los nombres desde for
for(var i=1;i<5;i++){
          document.getElementById("apDiv26").innerHTML =this['a0'+i];
}

asi que tenemos que this['a01']==a01....
esto funciona y como siempre me han dicho que la funcion eval mejor no utilizar, podemos trabajar con los nombres de las mismas variables como si fueran strings i llamamos al valor de esas variables mediante this[ ], de momento solo me funciona en firefox, pero que se pueda utilizar de esta manera facilita mucho la reduccion de codigo para paginas web.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2012 08:57 pm
Esto funciona porque en este caso this se refiere al objeto base de JavaScript. Cuando haces var, no estás haciendo otra cosa que crear una nueva propiedad para ese objeto.

Sin embargo this podría causar problemas cuando lo usas dentro del ámbito de otro objeto.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 May 2012 09:17 am
quieres decir que si tengo una variable dentro una funcion puedo acceder al valor de esa variable desde fuera la funcion, voy ha hacer unos experimentos aver
si pongo

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(akt);};
<div id="boton" onmouseover="bbb();">

evidentemente me saca --> en global

en cambio si pongo

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(akt);};
<div id="boton" onmouseover="aaa();bbb();">

pone --> en funcion

a ver que sucede si pongo this[]

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(this['akt']);};//le pongo this aki
<div id="boton" onmouseover="aaa();bbb();">

pone tambien--> en funcion

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(this['akt']);};//le pongo this aki
<div id="boton" onmouseover="aaa();alert(akt);">

saca-->en funcion
vamos a ver desde dos eventos diferentes

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(this['akt']);};//le pongo this aki
<div id="boton" onmouseover="aaa();" onclick="bbb();">

saca -->en funcion

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(this['akt']);};//le pongo this aki
<div id="boton" onmouseover="aaa();" onclick="alert(akt);">

saca -->en funcion

Código :

var akt="en global";
function aaa(){akt="en funcion";};
function bbb(){alert(this['akt']);};//le pongo this aki
<div id="boton" onmouseover="aaa();" onclick="alert(this['akt']);">

saca-->undefined //logicamente

en cambio si hago lo siguiente

Código :

var akt="en global";
function aaa(){this['akt']="en funcion";};
function bbb(){alert(this['akt']);};//le pongo this aki
<div id="boton" onmouseover="aaa();" onclick="alert(akt);">

logicamente saca-->en funcion

no veo que problema puede haber al utilizar this[ ]
veo mas como una ventaja que como un problema, simplemente tengo que utilizarlo fuera de las etiquetas donde logicamente me dara undefined
ademas si quiero crear mil variables es una ventaja

Código :

for(var i=0;i<1001;i++){
this['variable'+i]=i*14;
}

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 May 2012 12:23 pm

aukun escribió:

quieres decir que si tengo una variable dentro una funcion puedo acceder al valor de esa variable desde fuera la funcion


No, no he dicho eso.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.