Foros del Web » Programando para Internet » Javascript »

Desbordamientos de Pila

Estas en el tema de Desbordamientos de Pila en el foro de Javascript en Foros del Web. Buenas! Cada vez mas, ( en la herramienta online que estoy desarrollando ), al testeala, veo que muchos métodos de los protoripos no funcionan, y ...
  #1 (permalink)  
Antiguo 08/02/2013, 04:19
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 9 meses
Puntos: 30
Pregunta Desbordamientos de Pila

Buenas!


Cada vez mas, (en la herramienta online que estoy desarrollando), al testeala, veo que muchos métodos de los protoripos no funcionan, y solo los consiguo arreglar si no uso tantas propiedades del prototipo, es decir:

En algunos métodos de prototipo, me ha pasado (mas de dos y tres veces) que al intentar trabajar con muchas propiedades del propio prototipo (lo que seria la clase), no funciona, o bien no logra obtenerlas por referencia (que es como trabaja JS si tengo entendido bien) o tengo un desbordamiento de pila (demasiada información para una función, en este caso método)


Es posible? , la cantidad de propiedades no es muy alta, hablo de quizas 4 o 5.


Ejemplo en codigo de un ultimo caso :


Código Javascript:
Ver original
  1. function ManagementFrames (arrayID,arrayOut,arrayOn,arrayOutFinal){
  2.  
  3. this.ID = arrayID; // Primera cadena array, contiene los string con las id de CSS los divs
  4. this.Out = arrayOut; // Segunda cadena array, contiene los string con las id de CSS los divs que hacen que estos tengan una animacion de "irse"
  5. this.On = arrayOn; // Tercera cadena array, contiene los string con las id de CSS los divs que hacen que estos tengan una animacion de "entrar"
  6. this.OutF = arrayOutFinal; // Primera cadena array, contiene los string con las id de CSS los divs hacen que estos desaparezcan (propiedad display:none)
  7. this.ActualID = 2; // variable que contiene el indice con el que se trabaja, puesto que todas las cadenas siguen el mismo orden
  8.  
  9.  
  10.  
  11.  
  12.     this.ActiveE = function ActiveE(a){
  13.            
  14.                         n = a; // variable que es pasada al llamar la funcion, indica que div del indice entra
  15.  
  16.             document.getElementById(this.ID[n]).className = (this.On[n]);
  17.                
  18.             document.getElementById(this.ID[this.ActualID]).className = (this.out[this.ActualID]);
  19.  
  20.             Desactive=setTimeout(function(){document.getElementById(this.ID[this.ActualID]).className = (OutF[0]);},500);
  21.  
  22.            
  23.     }
  24.    
  25.  
  26. }
  27.  
  28. var ObjectManagementFrames = new ManagementFrames (['atmosferaframelogin','atmosferatransicionador02','atmosferatransicionador','atmosferatransicionador04'],['atmosferaframeloginOut','atmosferatransicionador02Out','atmosferatransicionadorOut','atmosferatransicionador04Out'],['atmosferaframeloginOn','atmosferatransicionador02On','atmosferatransicionadorOn','atmosferatransicionador04On'],['atmosferaOutF']);


En concreto, la parte que se con seguridad que falla es la parte donde setTimeOut inicia una propia función, y por algún motivo no funciona de los que explico arriba (supongo).

Última edición por Albuss; 08/02/2013 a las 04:29
  #2 (permalink)  
Antiguo 09/02/2013, 02:21
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 9 meses
Puntos: 30
Respuesta: Desbordamientos de Pila

Al menos me consuela el hecho de haber encontrado un bug que no se puede resolver.
  #3 (permalink)  
Antiguo 09/02/2013, 17:19
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Desbordamientos de Pila

Tu problema no es el que mencionás. Tu problema es de ámbito. Voy a simplificar tu ejemplo para verlo mejor:
Vos tenés esto:
Código PHP:
<script type="text/javascript">
function 
ManagementFrames (algo){ 
 
this.ID algo// Primera cadena array, contiene los string con las id de CSS los divs

    
this.ActiveE = function ActiveE(a){ 
            
             
            
Desactive=setTimeout(function(){alert(this.ID);},500);
 
            
    }
    
 
}
 
var 
ObjectManagementFrames = new ManagementFrames ('pp');
ObjectManagementFrames.ActiveE(1);
</script> 
Y no funciona porque this dentro del setTimeout no refiere al objeto dentro de cuyo método está inserto sino al objeto window, como se aprecia aquí:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script type="text/javascript">
function 
ManagementFrames (algo){ 
 
this.ID algo// Primera cadena array, contiene los string con las id de CSS los divs

    
this.ActiveE = function ActiveE(a){ 
            
             
            
Desactive=setTimeout(function(){alert(this.location.href);},500);
 
            
    }
    
 
}
 
var 
ObjectManagementFrames = new ManagementFrames ('pp');
ObjectManagementFrames.ActiveE(1);
</script>

</head>

<body>
</body>
</html> 
Una de las cosas que suelen hacerse para solucionarlo es esta:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script type="text/javascript">
function 
ManagementFrames (algo){ 
 
this.ID algo// Primera cadena array, contiene los string con las id de CSS los divs

    
this.ActiveE = function ActiveE(a){ 
            
             var 
_this=this;
            
Desactive=setTimeout(function(){alert(_this.ID);},500);
 
            
    }
    
 
}
 
var 
ObjectManagementFrames = new ManagementFrames ('pp');
ObjectManagementFrames.ActiveE(1);
</script>

</head>

<body>
</body>
</html> 
  #4 (permalink)  
Antiguo 10/02/2013, 18:05
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 9 meses
Puntos: 30
Respuesta: Desbordamientos de Pila

Ya lo habia testeado, esta linea de codigo se ejecuta correctamente :

Código Javascript:
Ver original
  1. Desactive=setTimeout(function(){document.getElementById(this.ID).className = (OutF[0]);},500);

Esta no :

Código Javascript:
Ver original
  1. Desactive=setTimeout(function(){document.getElementById(this.ID[this.ActualID]).className = (OutF[0]);},500);

Y he probado lo siguiente :

Código Javascript:
Ver original
  1. {document.getElementById(this.ID[NOMBREDELOBJETO.Propiedad]).className = (OutF[0]);},500);

Última edición por Albuss; 10/02/2013 a las 18:41

Etiquetas: desbordamiento, metodo, propiedades
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 12:30.