Foros del Web » Programando para Internet » Javascript »

setTimeout de metodo de un objeto

Estas en el tema de setTimeout de metodo de un objeto en el foro de Javascript en Foros del Web. Tengo una function que hace crear un objeto cuando se le llama con la instancia new. var cont=0; function pto() { documento.innerHTML+="<div id='pto"+cont+"' class='pto'></div>"; this.ref="pto"+cont; ...
  #1 (permalink)  
Antiguo 22/12/2003, 10:22
 
Fecha de Ingreso: octubre-2003
Ubicación: mai jaus
Mensajes: 21
Antigüedad: 20 años, 6 meses
Puntos: 0
setTimeout de metodo de un objeto

Tengo una function que hace crear un objeto cuando se le llama con la instancia new.

var cont=0;
function pto() {
documento.innerHTML+="<div id='pto"+cont+"' class='pto'></div>";
this.ref="pto"+cont; cont++;
}

Hasta aqui todo bien . Esa function tiene un metodo, que hace agrandar el punto, el metodo se llama crecer y equivale a la function crecerPto. Añado a pto():

this.crecer=crecerPto;

y crecerPto tiene un codigo para que cada segundo se aumente el width del punto en 1px. Hay esta el problema, en poner en el interior de esta function el setTimeout para que se llame a sí misma en 1 segundo, porque he probado esto y da errores :

setTimeout("this.crecer('"+prop+"',"+fin+")",1000) ; --> El objeto no acepta esta propiedad o metodo: Se refiere al this.crecer, pero no entiendo porque no la acepta.

setTimeout(this+".crecer('"+prop+"',"+fin+")",1000 ); --> Se esperaba '['.

Y por ultimo a la desesperada:
setTimeout(this.crecer+"('"+prop+"',"+fin+")",1000 ); --> que sencillamente no hace nada, supongo que es el mismo efecto que llamar a this.crecer sin argumentos. Pero es extraño porque nisiquiera da el primer error de que elobjeto no acepta esta propiedad o metodo.


En fin, espero que me den una solucion sobre como hacer esto. Me vale cualquiera válida, es un proyecto

Un saludo
__________________
derkeNuke webmaster
  #2 (permalink)  
Antiguo 22/12/2003, 12:33
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola derkenuke1:

Lo que pones en el "setTimeout" tiene que ser una "cadena de texto", y lo puedes fabricar fuera de la llamada :

var llamada = "this.crecer('prop" + fin + "')";
setTimeout(llamada, 1000);

No sé si lo use correctamente, pero el ejemplo sé muy bien que vale, porque lo suelo usar mucho.

Saludos
  #3 (permalink)  
Antiguo 22/12/2003, 16:54
 
Fecha de Ingreso: octubre-2003
Ubicación: mai jaus
Mensajes: 21
Antigüedad: 20 años, 6 meses
Puntos: 0
el problema es con el this

No si el problema no está en que no sepa utilizar el setTimeout(), sino que ponga lo que ponga lo que quiero hacer no me sale. La duda es que no se llamar a un metodo en un setTimeout desde otro metodo del mismo objeto, me da error, y encima no se porqué.
__________________
derkeNuke webmaster
  #4 (permalink)  
Antiguo 23/12/2003, 05:25
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
dos cosas...

primero, no necesitas usar el this.

Segundo... prueba directamente así

setTimeout('crecer(prop,fin)',1000);


Aunque habría de ver de dónde salen prop y fin. Seguramente se necesitará un paso de variables previo. Dime cómo empieza la función crecer

crecer(variable1,variable2)

dime cómo se llaman estas variable1 y 2.

También ayudaría poder probarlo en directo, deja un enlace donde poder probar...
  #5 (permalink)  
Antiguo 24/12/2003, 21:10
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
Bueno tengo este codigo, si les apetece leerlo y analizarlo me gustaria mucho que encontraran una solucion. pto() hace de clase. Los metodos getProp y ponerProp lo unico que hacen es devolver o poner respectivamente la propiedad que se les indique del style de un pto. La function rect() crea un rectangulo, la idea era crear los 4 vertices e ir alargando cada punto hasta que el rectangulo se cierre y quede dibujado.

<style>
.pto { font-size:1px; background-color:black; width:1;height:1;position:absolute; }
</style>

<script>
cont=0;
function pto() {
documento.innerHTML+="<div id='pto"+cont+"' class='pto'></div>";
this.ref="pto"+cont; cont++;
this.mover=moverPto;
this.getProp=propPto; this.ponerProp=ponerPropPto;
this.crecer=crecerPto;
}

function moverPto(x,y) { eval(this.ref+".style.top="+y+";"); eval(this.ref+".style.left="+x+";"); }
function propPto(prop) { return eval("parseInt("+this.ref+".style."+prop+")"); }
function ponerPropPto(prop,val) { eval(this.ref+".style."+prop+"="+val); }

function rect(l,t,w,h) {
A=new pto(); A.mover(l,t);
B=new pto(); B.mover(l+w,t);
C=new pto(); C.mover(l+w,t+h);
D=new pto(); D.mover(l,t+h);
A.crecer("width",w);
}

function crecerPto(prop,fin) {
if(this.getProp(prop)<fin || isNaN(this.getProp(prop))) {
if(isNaN(this.getProp(prop))) {
this.ponerProp(prop,2);
}
else {
this.ponerProp(prop,(this.getProp(prop)+1));
alert("No es NaN\nejecutado crecer:\nlacapa."+prop+"="+this.getProp(prop));
}
setTimeout("this.crecer('"+prop+"',"+fin+")",1000) ;
}
}

rect(100,100,500,200);

</script>


Espero que me ayuden. 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.
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 18:12.