我创建了一个名为Game
的构造函数。然后,我尝试使用原型添加两个新函数(update
和render
)来扩展它的功能。
但是,我希望我的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知识存在一些(明显的)缺口,我无法做到这一点。似乎this
和parent
都指的是window
- 我猜这是因为函数是如何创建的。
这是我收到的错误;
Game.js:6未捕获的TypeError:无法执行 'window'上的'requestAnimationFrame':回调提供为 参数1不是函数。
我已经在SO上找到了以下问题,但它们似乎并没有对这个特定问题有所帮助。
Javascript multiple prototype functions - how to call one from another
答案 0 :(得分:3)
那些行
requestAnimationFrame(this.render);
requestAnimationFrame(this.update);
应该是
requestAnimationFrame(this.render.bind(this));
requestAnimationFrame(this.update.bind(this));
否则,在第二次执行递归时,关键字this
将引用window
对象而不是Game
。 window.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();