2015-12-19 1 views
-2

Я пытаюсь запустить код бесконечно. Я хочу использовать для этого метод setInterval(). Проблема, с которой я сталкиваюсь в своей программе, заключается в том, что она вообще не выполняется. Я попытался найти ошибку, используя консоль браузера, но она не говорит об ошибке. Я проверил все методы, которые вызывают до того, как setInterval() будут правильно изложены. Вот основной код: -setInterval() not firing

"use strict"; 
var Main = { 
    //properties 

    initialize: 
     setInterval(this.gameLoop, 15); 
    }, 

    gameLoop: function(){ 

    } 

    //other methods 
} 

window.addEventListener("load", Main.initialize, false); 
+2

Вы вообще вызываете функцию this.gameLoop? –

+0

@ c-smile nope совсем нет. this.gameLoop не выполняется даже один раз. – arandomguy

+0

И что это за this.gameLoop? Это функция? –

ответ

1

Проблема заключается в том, что this ссылается на window объект вместо основного объекта. Смотрите эту Fiddle

Решение 1

Измените setInterval на:

setInterval(Main.gameLoop, 15); 

Решение 2

Изменение load событие:

window.addEventListener("load", function() { Main.initialise.call(Main); }, false); 

Объект Путь

function Main() { 
    // The constructor 
} 

Main.prototype.initialise = function() { 
    setInterval(function() { 
     this.gameLoop(); 
    }, 15); 
} 

Main.prototype.gameLoop = function() { 
    // Do gameloop stuff 
} 

var main = new Main(); 
window.addEventListener("load", function() { 
    main.initialise(); 
}, false); 

Пожалуйста, обратите внимание, что я использую initiali сек е вместо initiali г е, потому что его, как я его по буквам (как раз в случае, если вы направляете копию пасты и удивляются, почему его не работает для некоторых бит)

+0

, почему ключевое слово this это ссылается на объект 'window' вместо объекта 'Main'? Должен ли он ссылаться на владельца метода, который я выполняю? – arandomguy

+0

'this' относится к тем, что вызывает функцию. По умолчанию при вызове метода на не экземпляр он будет проходить через текущий контекст (IE: 'window', потому что это был последний контекст) – JosephGarrone

+0

Ваша переменная' Main' на самом деле представляет собой просто ассоциативный массив с функцией как один из значения. Я отредактирую свой ответ, чтобы показать, как обычно это делается с помощью «объекта». – JosephGarrone