Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не могу вызвать по setInterval() метод класса.(отрабатывает всего 1 раз) (https://javascript.ru/forum/misc/20023-ne-mogu-vyzvat-po-setinterval-metod-klassa-otrabatyvaet-vsego-1-raz.html)

ekonomizer 06.08.2011 15:50

Не могу вызвать по setInterval() метод класса.(отрабатывает всего 1 раз)
 
// Есть класс:

function Matrix()
{
        // В ней есть метод:
        this.move = function()
        {
        }
}

// Есть точка входа:
window.onload = function()
{
       // В ней я создаю объект:
       m1 = new Matrix();

       // И пытаюсь запускать по таймеру метод move.
       setInterval(m1.move, 1000);
}


Возникает проблема - функция отрабатывает всего 1 раз, а нужно пока не остановлю.
Помогите пожалуйста!

devote 06.08.2011 16:13

может стоит попробовать так:
setInterval(m1.move, 1000);

ekonomizer 06.08.2011 16:23

пробовал, это не решает проблему.

Sweet 06.08.2011 16:47

Вот пример:
function test(){
  alert( this );
};

var a = test,
    b = {
      c: test
    };

a();//этот вызов покажет window
b.c();//здесь - объект переменной b

Так вот к чему это я:
setInterval(m1.move, 1000);

Здесь в setInterval передается функция, при этом она уже оторвана от контекста, и this ссылается на глобальный объект:
//Есть конструктор (классов нет)
function Constructor(){
  this.method = function(){
    alert( this );
  };
};

var instance = new Constructor;

instance.method();
// выведет instance

setTimeout( instance.method, 1 );
// выведет window

// выход: использование промежуточной функции-обертки
setTimeout( function(){
  instance.method();
  // выведет instance
}, 1 );

ekonomizer 06.08.2011 17:43

Огромное спасибо за подробный ответ!!! Проблема решилась!:)


Часовой пояс GMT +3, время: 06:48.