Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] POO y javascript

Estas en el tema de POO y javascript en el foro de Javascript en Foros del Web. estoy un tanto liado con esto no consigo desde un método acceder a una propiedad del mismo objeto... este es el código @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 10/03/2013, 15:10
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 14 años
Puntos: 66
POO y javascript

estoy un tanto liado con esto no consigo desde un método acceder a una propiedad del mismo objeto... este es el código
Código Javascript:
Ver original
  1. <script>
  2. window.onload=function(){
  3.     fad=new Fader();
  4. }
  5. var Fader=function(){
  6.     this.opa=100;
  7.     this.interval=setInterval(this.setOpa,100);
  8.    
  9. }
  10. Fader.prototype.setOpa=function(){
  11.     alert(this.opa);
  12. }
  13. </script>
no se como hacer que desde setOpa se acceda a opa
  #2 (permalink)  
Antiguo 10/03/2013, 22:08
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: POO y javascript

...pues en la linea 7 debería ser this.setOpa() no this.setOpa...estas llamando a un método, no a un atributo...entonces la linea 7 te quedaria asi...

Código Javascript:
Ver original
  1. this.interval=setInterval(this.setOpa(),100);
  #3 (permalink)  
Antiguo 10/03/2013, 23:09
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 14 años
Puntos: 66
Respuesta: POO y javascript

http://www.forosdelweb.com/f13/setin...imeout-922586/

Cita:
Lo que puede pasar es que se aborte por detectar un error... [...] El posible error es que como primer parámetro no debes usar la función que quieres temporizar... vale esa función como una cadena (o sea entrecomillada), o como su nombre, pero sin el juego de paréntesis...
Y eso es lo que ocurre si lo hago así
  #4 (permalink)  
Antiguo 11/03/2013, 00:27
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: POO y javascript

....pues mira: http://jsbin.com/axirav/18/edit

...como ves funciona perfectamente, perooooooo...entrando a un nivel mas profundo de Javascript, esto puede llegar a ocasionar problemas de seguridad de la misma forma que lo hace eval();...entonces, porque funciona??? ...no significa que sea incorrecta esta forma de pasar una función como argumento dentro de SetTimeout y SetInterval, es totalmente valido dentro de Javascript al igual que el uso eval();, peroooo...dependiendo lo que estés desarrollando y el entorno general de tu código, muchas veces no es recomendable su uso...

...entonces, modificando un poco el código, como primer argumento, deberias pasar una referencia a una función que puede ser el nombre de la función, o una variable de referencia o una función anónima...
  #5 (permalink)  
Antiguo 11/03/2013, 00:34
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 14 años
Puntos: 66
Respuesta: POO y javascript

no se si te habrás confundido de ejemplo, sigue funcionando como un setTimeout
  #6 (permalink)  
Antiguo 11/03/2013, 00:43
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: POO y javascript

...no, no me confundí nada, te mostré ese ejemplo para que veas como funciona llamando la función directamente, que no es incorrecto su uso, pero no es recomendado, igual que sucede con eval()...

...ahora si no quieres usar esa forma, y como te explique antes, debes pasar como argumento una referencia a una función que puede ser el nombre de la función, o una variable de referencia o una función anónima, asi..

Código Javascript:
Ver original
  1. window.onload=function(){
  2.     fad=new Fader();
  3. };
  4.  
  5.  
  6. var Fader=function(){
  7.   this.opa=100;
  8.   var that = this;
  9.   setInterval(function(){
  10.   that.setOpa();
  11.   }, 100);
  12.    
  13. };
  14.  
  15. Fader.prototype.setOpa=function(){
  16.     alert(this.opa);
  17. };

con respecto a lo que dices " sigue funcionando como un setTimeout???",, el problema es el alert() y el valor que retorna al cerrar el pop up, frena la ejecución del Javascript..si lo intentas con console.log veras que funciona perfectamente http://jsbin.com/eqibel/24/edit
  #7 (permalink)  
Antiguo 11/03/2013, 00:49
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 14 años
Puntos: 66
Respuesta: POO y javascript

ahi estaba el meollo

habia llegadoa probar algo como esto
setInterval(function(){
this.setOpa();
}, 100);

pero no había manera

tendré que ver que se hace con var that = this;

muchísimas gracias
  #8 (permalink)  
Antiguo 11/03/2013, 01:03
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: POO y javascript

..pues mira, porque uso var that=this;

..si vos pasas como argumento de esta forma :

Código Javascript:
Ver original
  1. setInterval(function(){
  2.   this.setOpa();
  3.   }, 100);

...veras que no funciona, porque?...al llamar al método setOpa(), el this pierde el contexto del objeto donde se aplica, y toma como contexto el objeto window...

...para que esto no suceda, defino la variable that y la inicializo con this(el contexto del objeto), entonces al llamar al método that.setOpa(); lo estoy invocando dentro del contexto del objeto...

Etiquetas: poo
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 22:35.