Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] ¿ Porque setInterval no llama a un metodo de un objeto ?

Estas en el tema de ¿ Porque setInterval no llama a un metodo de un objeto ? en el foro de Javascript en Foros del Web. Creo un objeto Scrooll en JavaScript de esta manera: Código: window.onload=function() { // Declaro Constructor function Scrooll() { this.avanza=avanza; //Mas código aquí debajo... .... } ...
  #1 (permalink)  
Antiguo 31/05/2015, 06:01
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 11 meses
Puntos: 1
¿ Porque setInterval no llama a un metodo de un objeto ?

Creo un objeto Scrooll en JavaScript de esta manera:

Código:
window.onload=function()
  {
     // Declaro Constructor
     function Scrooll()
        {
           this.avanza=avanza;
           //Mas código aquí debajo...
           ....
        }
     
     // Declaro método
     function avanza()
        {
           // Mas código aquí debajo ....
           ....
        }
       
    // Declaro objeto
   var miObjeto = new Scrooll();

   window.setInterval('miObjeto.avanza()',1000);
    
  }
El problema es que el setInterval no me ejecuta el método de miObjeto. Si en cambio lo llamo fuera de setInterval si que me lo ejecuta.
  #2 (permalink)  
Antiguo 31/05/2015, 06:41
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 3 meses
Puntos: 578
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

Es preferible utilizar directamente una función:

Código Javascript:
Ver original
  1. window.setInterval(function(){miObjeto.avanza()},1000);
  #3 (permalink)  
Antiguo 31/05/2015, 06:54
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

Lo he probado y funciona !!

Pero porque ?

Si ponía lo siguiente tampoco funcionaba pues creo que la llamaba solo la primera vez:

Código:
function anima() { miObjeto.avanza(); }

window.setInterval ( anima(), 1000 );
Cual es el motivo por el que funciona de una manera y no de otra.?

Asi que he probado como me has dicho y si que va:

Código:
window.setInterval( function (){ miObjeto.avanza() }, 1000 );

Última edición por loganbdn; 31/05/2015 a las 06:56 Razón: Cual es el motivo por el que funciona de una manera y no de otra.?
  #4 (permalink)  
Antiguo 31/05/2015, 06:58
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

Cual es el motivo por el que funciona de una manera y no de otra.?
  #5 (permalink)  
Antiguo 31/05/2015, 07:00
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 3 meses
Puntos: 578
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

He estado haciendo pruebas y al parecer setInterval y setTimeout ejecutan el código globalmente cuando se utiliza la opción de string. En este caso, es por el tema del scope. Las variables que se declaran dentro de las funciones no se pueden acceder globalmente y por ese motivo generaba error.

Última edición por PHPeros; 31/05/2015 a las 07:37
  #6 (permalink)  
Antiguo 31/05/2015, 07:38
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

Solo me funciona con:

Código:
window.setInterval( function (){ miObjeto.avanza() }, 1000 );
  #7 (permalink)  
Antiguo 31/05/2015, 07:56
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, 6 meses
Puntos: 834
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

Como te han dicho, el tema es el ámbito de la variable miObjeto. Como la estás declarando con la palabra reservada var dentro de una función, es una variable local. Si le quitás la plabra var, será global y funcionará sin problemas.
  #8 (permalink)  
Antiguo 06/06/2015, 18:10
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: ¿ Porque setInterval no llama a un metodo de un objeto ?

Cita:
Iniciado por Panino5001 Ver Mensaje
Como te han dicho, el tema es el ámbito de la variable miObjeto. Como la estás declarando con la palabra reservada var dentro de una función, es una variable local. Si le quitás la plabra var, será global y funcionará sin problemas.
Gracias

Etiquetas: llama, metodo, objeto, setinterval
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 09:23.