14/02/2009, 13:08
|
| | | Fecha de Ingreso: febrero-2005
Mensajes: 994
Antigüedad: 19 años, 11 meses Puntos: 9 | |
Respuesta: este javascript no me hace fade... He estado "investigando" y todo depende de que no se entrecomille la accion del timeout, si se entrecomilla la accion digamos:
function()
{
_this=this
t=1000
setTimeout("alert(_this)",t)
}
devuelve que _this no esta definido, en cambio si la orden es:
setTimeout(function(){alert(_this)},t)
devuelve que _this es un objeto, el objeto this, como en tu script, y todo correcto.
__________________________________________________ __________________
Siguiendo las pruebas ,si se da el alert sin comillas, y fuera de funcion que le abarque:
setTimeout(alert(_this),t)
no hace el timeout y devuelve el objeto this, aunque despues da error de argumento no valido, esto quiere decir que la instruccion dentro del timeout o bien va dentro de una declaracion de funcion anonima o va entrecomillado.
Siguiendo con esta forma erronea ,una curiosidad.
Si intetamos asignar el valor de _this a una variable dentro del timeout
setTimeout(vlr=_this,t)
sigue sin hacer la pausa, pero _this es traspasado a vlr sin lanzar error de argumento no valido como hizo con el alert.
pero si a _this le damos un valor literal, y en el timeout le queremos dar ese valor a otra variable...:
_this="prueba"
setTimeout(vlr=_this,t)
devuelve que prueba no esta definido, asi como si prueba fuera una variable, pero si posteriormente comprobamos el valor de vlr nos devuelve "prueba" correctamente.
Sin embargo si la cadena literal asignada es un numero:
_this="2"
no da error (digamos ,2 no esta definido), sino que vlr contiene el literal "2" adecuadamente, en este caso no toma el literal como una variable.
Y si es un numero en toda regla:
_this=2
devuelve un error en la asignacion de argumento no valido, y el script se para sin posibilidad de averiguar que valor se le dio a vlr.
Espero que esto le valga a alguien para sacarlo de dudas, aunque a mi me ha dejado alguna sin resolver.
Saludos. |