从另一个(包括它自己)

时间:2016-04-05 11:01:15

标签: javascript prototype

问题

我创建了一个名为Game的构造函数。然后,我尝试使用原型添加两个新函数(updaterender)来扩展它的功能。

但是,我希望我的update功能能够同时调用本身,然后调用render

我的代码

var Game = function(){

};

Game.prototype.update = function(){
    requestAnimationFrame(this.render);
    requestAnimationFrame(this.update);
};
Game.prototype.render = function(){
  console.log('Rendering');
};

var game = new Game();
game.update();

我还尝试了什么

requestAnimationFrame(render);
requestAnimationFrame(update);

和..

requestAnimationFrame(Game.render);
requestAnimationFrame(Game.update);

和...

requestAnimationFrame(Parent.render);
requestAnimationFrame(Parent.update);

但由于我的javascript知识存在一些(明显的)缺口,我无法做到这一点。似乎thisparent都指的是window - 我猜这是因为函数是如何创建的。

这是我收到的错误;

  

Game.js:6未捕获的TypeError:无法执行   'window'上的'requestAnimationFrame':回调提供为   参数1不是函数。

我已经找到的问题

我已经在SO上找到了以下问题,但它们似乎并没有对这个特定问题有所帮助。

Javascript multiple prototype functions - how to call one from another

calling function from prototype function

2 个答案:

答案 0 :(得分:3)

那些行

requestAnimationFrame(this.render);
requestAnimationFrame(this.update);

应该是

requestAnimationFrame(this.render.bind(this));
requestAnimationFrame(this.update.bind(this));

否则,在第二次执行递归时,关键字this将引用window对象而不是Gamewindow.update显然不是一个函数,因为指定了错误。

答案 1 :(得分:1)

你丢失了对Game对象的引用,试着像这样绑定'this':

var Game = function(){

};

Game.prototype.update = function(){
    requestAnimationFrame(this.render.bind(this));
    requestAnimationFrame(this.update.bind(this));
};
Game.prototype.render = function(){
  console.log('Rendering');
};

var game = new Game();
game.update();