Foros del Web » Programando para Internet » Javascript »

OOP Avanzado: setTimeout dentro de una clase, problema con this

Estas en el tema de OOP Avanzado: setTimeout dentro de una clase, problema con this en el foro de Javascript en Foros del Web. Este es un problema interesante: resulta que dentro de un metodo de una clase tengo este llamado setTimeout("buttons.setNextOff()",150); el problema es que buttons es una ...
  #1 (permalink)  
Antiguo 20/10/2006, 10:57
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 6 meses
Puntos: 4
Pregunta OOP Avanzado: setTimeout dentro de una clase, problema con this

Este es un problema interesante:

resulta que dentro de un metodo de una clase tengo este llamado

setTimeout("buttons.setNextOff()",150);

el problema es que buttons es una instancia ya que el codigo en realidad deberia ser así setTimeout(this.setNextOff(),150); pero setTimeout pareciera que trabaja solo con strings y si opto por esto setTimeout("this.setNextOff()",150); obviamente se produce un error por que esta llamado fuera del objeto al momento de ejecutarse.

Sobre el tema encontre esto pero es complicado de comprender
http://www.jibbering.com/faq/faq_not...es.html#clObjI

Si alguien se ha encontrado con un problema similar, agradeceria sus comentarios al respecto
  #2 (permalink)  
Antiguo 20/10/2006, 11:29
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola:

Es complicada la solución (al menos la que yo implemento), y consiste en que un atributo del objeto es la misma variable (el mismo nombre)... lo uso en el menú de mi página (caricatos.net)

function claseMenu(nombre, atr1) {
this.nomre = nombre;
this.atr1 = atr1;
}

var miMenu = new claseMenu("miMenu", "atributo 1");
...

Y luego desde el objeto se puede auto-referenciar con window[this.nombre]...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 20/10/2006, 15:22
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 6 meses
Puntos: 4
De acuerdo

Hola Caricatos:

Muchas gracias por responder mis dos preguntas

Es una buena idea la forma de solucionar el problema, tambien me imagino que hay otras formas, de todas maneras encuentro que javascript en si es bastante tosco para hacer grandes cosas...

Tambien revise tu web y el codigo del menu... me gusto la forma de escribir el codigo y los comentarios, me senti bien leyendo tus codigos...
El menu me gusto mucho tambien, esta muy bueno, cuando lo estaba analizando llego un amigo del trabajo que habia leido algo acerca de que esa forma de generar javascript, consume hartos recursos y me dijo que la forma optima era ocupar array con join o algo similar...

Me refiero a esta parte
Código HTML:
function _generar()	{
...
				salida += "<span id='" + items[elemento].titulo + "'";
				salida += " onmouseover='cambiaColor(this.id); ";
				salida += " chequearSubMenu(\"" + this.nombre + "\", this.id)'";
				salida += " onmouseout='recuperaColor(this.id);"
				salida += " limpiaMenu(\"" + this.nombre + "\", this.id)'";
				salida += " class='menu'";
				salida += " onclick='" + items[elemento].evento;

				salida += "(\"" + this.nombre + "\", this.id)'";

				salida += " style='background-color: " + colorFondo;
				salida += "; color: " + colorFrente + ";' >";

				salida += "<img src='" + iconos[elemento].src + "'";
				salida += " width='" + tamIcono.split("x")[0] + "px'";
				salida += " height='" + tamIcono.split("x")[1] + "px'";
				salida += " alt='icono' /> ";

				salida += item...
Muchas gracias por tu ayuda

Saludos
  #4 (permalink)  
Antiguo 20/10/2006, 15:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola:

Pues no sé si habrá formas mejores, pero te puedo asegurar que he intentado conocerlas.
Hay una forma de conocer todos los objetos y variables usando un array asociativo de los atributos del objeto window -for (atributo in window)-, pero luego habría que discriminar todos los atributos menos el que se corresponda con la variable en cuestión.

Sobre los recursos, una cadena de pocas líneas no creo que consuman tantos, y lo del array con join() ... la indexación del array y las variables utilizadas creo que harían el código bastante más complejo, tal vez en algunos casos sean convenientes (justamente estoy trabajando unas búsquedas php-mysql y uso esa técnica... en php es implode)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 13:55.