2016-05-05 3 views
0

нужна помощь в понимании clousures и prototypes, я вызываю метод цикла внутри функции, проблема в том, что когда я вызываю «loop» возвращает «is not функция»вот пример:Функция вызова protoype через «this» return «не является функцией»

window.onload= startGame(); 

var theGame; 

function startGame(){ 
    theGame = new game(); 
    theGame.loop(); /*im calling the method*/ 

} 

function game(){ 
    this.canvas=document.getElementById("breakout"); 
    this.context = this.canvas.getContext('2d'); 
    this.canvas.width=window.innerWidth; 
    this.canvas.height=window.innerHeight; 
    // this.loop(); /*¿can i call it here too?*/ 
    this.speed = 100; 

} 

game.prototype.loop = function() { 

    console.log(this.speed+=1); 

    var self = this; 
    requestAnimationFrame(function(){ 
      self.loop(); 
     }); 

}; 

, когда я называю„“метод браузеров ошибки „РАМОЧНАЯ Uncaught TypeError: theGame.loop не является функцией“

+1

Он должен быть 'window.onload = StartGame;', без вызова функции там. – Bergi

+2

Вопрос о проблемах, связанных с вызовом функции преждевременно, задавался так много раз. Я думаю, нам нужно каноническое Q & A для этого (или, по крайней мере, определить, какой из существующих он должен быть). –

+0

Или переместите 'startGame()' до конца, после определения 'game.prototype.loop'. – Oriol

ответ

2

проблема заключается в том, что вы неправильно настроив обработчик события onload, так как вы вызываете функцию сразу, а не просто r вызывая его.

window.onload= startGame(); 

Должно быть:

window.onload = startGame;