Foros del Web » Programando para Internet » Javascript »

creando funcion para mostrar un objeto completo: problema

Estas en el tema de creando funcion para mostrar un objeto completo: problema en el foro de Javascript en Foros del Web. Código PHP: < SCRIPT TYPE = "text/javascript"  LANGUAGE = "JavaScript" > function  ver ( u , nivel ){     var  espacio ;     for( i = 0 ; ...
  #1 (permalink)  
Antiguo 15/04/2007, 18:00
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
creando funcion para mostrar un objeto completo: problema

Código PHP:
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
function 
ver(u,nivel){
    var 
espacio;
    for(
i=0;i<nivel;i++)
        
espacio+="-";
    if(
u.length!=0){
        for(
x in u){
            if(
u[x].length!=0){
                
ver(u[x],nivel+1);
            }else                
                
document.write(espacio+x);
        }
    }else
        
document.write(espacio+u);
    return;
}
var 
x={saludo:'hola',despedida:'chau',gritar:function(mensaje){alert(mensaje);}}
ver(x);
-->
</SCRIPT> 

cual es el problema aca?, nose porque no funciona.
__________________
Dios es la unica fuente de todo bien.
  #2 (permalink)  
Antiguo 15/04/2007, 18:43
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: creando funcion para mostrar un objeto completo: problema

Me tira este error en FF2:
Cita:
Error: too much recursion
Línea: 18
Lo que hay en la línea 18 es
Código PHP:
                ver(u[x],nivel+1); 
Ten cuidado con hacer
Código PHP:
if(u[x].length!=0
ya que u[x] podría ser (y de hecho hay en este ejemplo) una cadena, y las cadenas, además de los arrays, también tienen propiedad length.


También he visto que no pasas el segundo argumento de la función, nivel, que creo que tenrdría que ser un cero.

Y ten en cuenta que si no pones
Código PHP:
var espacio=""
tu variable espacio tendrá por valor inicial undefined. Ni siquiera podrás utilizar el operador += con él.

Código PHP:
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
function 
ver(u,nivel){
    var 
espacio="";
    for(
i=0;i<nivel;i++)
        
espacio+="-";
    if(
u.length!=0){
        for(
x in u){
            
//if(u[x].length!=0){
            //    ver(u[x],nivel+1);
            //}else                
                
document.write(espacio+x);
        }
    }else
        
document.write(espacio+u);
    return;
}
var 
x={saludo:'hola',despedida:'chau',gritar:function(mensaje){alert(mensaje);}}
ver(x,0);
-->
</SCRIPT> 

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 15/04/2007, 20:20
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Re: creando funcion para mostrar un objeto completo: problema

gracias por las correcciones. otra cosa, ahi me comentas "u[x].length!=0" esa seccion, pero entonces, hay alguna funcion que me detecte si u[x] tiene o mejor dicho es un objeto?osea supongamos que es y el indice es b entonces b el contenido se vería asi u[x][b] y luego lo mismo para esto, tiene que haber alguna forma de detectar si es un string o un objeto.

¿Cómo sería?


PD: Ademas, el for que aparece con i --->
Código:
for(i=0;i<u.length;i++)
es para hacer un espacio previo con - equivalente a la profuncidad del string a imprimir, or ejemplo si x es un elemento de u (u[x]) x tendría prfundidad 1 entonces se imprimiría con un guion antes del nombre, si fuera que estamos sobre b que es un elemento del objeto u[x], imprimiríamos b con dos guiones bajos anteponiendolos, osea asi
u[x] //imprime "-x"
u[x][b] //imprime "--b" y asi
__________________
Dios es la unica fuente de todo bien.

Última edición por ASCENDEDMASTERS; 15/04/2007 a las 20:34
  #4 (permalink)  
Antiguo 15/04/2007, 22:39
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: creando funcion para mostrar un objeto completo: problema

Hola:

Debes tener cuidado con este tipo de métodos recursivos... a mi me han bloqueado la máquina en más de una ocasión... por ejemplo, si buscas recursivamente los elementos de window, te puedes encontrar con cosas como:
window.window, window.window.window, window.self, window.self.window..., o sea que te puedes encontrar con bucles infinitos...

Otro caso:
document.body, document.body.firstChild, document.body.firstChild.parentNode

Pueden encontrarse montones de casos que produzcan recursiones recursivas.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 16/04/2007, 00:23
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Re: creando funcion para mostrar un objeto completo: problema

que feo, entonces no me puedo guiar por eso

yo queria usar eso como para estudiar bien el tema pero no se puede.

--------------------------------------------------------
otra cosa, supongamos que yo tengo variables con nombres como

var1
var2
var3

y yo quiero con un for recorrer a todas, como hago para escribir el nombre usando una variable para formar el nombre propiamente dicho? en php la variable es $var y si yo quiero escribir con variables el nombre sería asi

$otravariable=2;
${"nombre_de_la_variable"+$otravariable}

eso sería lo mismo que escribir $nombre_de_la_variable2


y... otro tema tambien, tengo este codigo



Código PHP:
<html>
<
head><title>hola</title>
<
script language="JavaScript">
<!--
function 
abc(){
    var 
b="";
    var 
x={hola:"saludo"};
    for(var 
i in x)
        
b+=x+"<br>";
    
document.getElementById('redirect2').innerHTML=b;
    return 
b;
}
</script>
</head>
<body onLoad="abc()"> <!--<div-->
<div id="redirect2"></div>
</body>
</html> 



, porque no me funciona? es decir, si yo hago en el tag body asi

onLoad="document.getElementById('redirect2').inner HTML=abc()"
y en la funcion abc borrando la linea que hace document.... y retornando el valor b, me funciona, pero si hago document....=b adentro de la funcion no me funciona. porque?
__________________
Dios es la unica fuente de todo bien.
  #6 (permalink)  
Antiguo 16/04/2007, 14:42
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Re: creando funcion para mostrar un objeto completo: problema

__________________
Dios es la unica fuente de todo bien.
  #7 (permalink)  
Antiguo 17/04/2007, 05:17
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: creando funcion para mostrar un objeto completo: problema

Cita:
Iniciado por ASCENDEDMASTERS Ver Mensaje
otra cosa, supongamos que yo tengo variables con nombres como

var1
var2
var3

y yo quiero con un for recorrer a todas, como hago para escribir el nombre usando una variable para formar el nombre propiamente dicho?
Bueno, todas las variables cuelgan del objeto window, así que podrías hacer:
var var1="Hola", var2="que tal", var3="bien";
window["var1"]
window["var2"]
window["var3"]

También podrías construir algo con la función eval(), pero creo que es más limpio así.


Cita:
Iniciado por ASCENDEDMASTERS Ver Mensaje

Código PHP:
<html>
<
head><title>hola</title>
<
script language="JavaScript">
<!--
function 
abc(){
    var 
b="";
    var 
x={hola:"saludo"};
    for(var 
i in x)
        
b+=x+"<br>";
    
document.getElementById('redirect2').innerHTML=b;
    return 
b;
}
</script>
</head>
<body onLoad="abc()"> <!--<div-->
<div id="redirect2"></div>
</body>
</html> 



, porque no me funciona? es decir, si yo hago en el tag body asi

onLoad="document.getElementById('redirect2').inner HTML=abc()"
y en la funcion abc borrando la linea que hace document.... y retornando el valor b, me funciona, pero si hago document....=b adentro de la funcion no me funciona. porque?
Qué extraño... fíjate que ni siquiera se llama a la función (prueba metiendole un alert). Además hay otra cosa curiosa, si quitas el comentario HTML que has puesto, parece ser que todo funciona como debería:
Código PHP:
<head><title>hola</title>
<
script language="JavaScript">
<!--
function 
abc(){
    var 
b="";
    var 
x={hola:"saludo"};
    for(var 
i in x)
        
b+=x[i]+"<br>";
    
alert(b);
    
document.getElementById('redirect2').innerHTML=b;
    return 
b;
}
</script>
</head>
<body onload="abc()">
<div id="redirect2"></div>
</body>
</html> 
He corregido una línea, creo que dentro del bucle quisistes poner b+=x[i]+"<br>";


En firefox el comentario no da problemas, pero en IE.. pues.. qué le vamos a hacer.


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #8 (permalink)  
Antiguo 17/04/2007, 08:10
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Re: creando funcion para mostrar un objeto completo: problema

Gracias Derkenuke
__________________
Dios es la unica fuente de todo bien.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:46.