我有这种奇怪的行为,即使我能轻易解决这个问题,我也想知道为什么会这样。
function Game () {
this.viewport = { ... };
this.player = Player;
this.renderer = { ... };
this.stage = { ... };
this.init = function () {
//THIS GETS EXECUTED
this.setKeyBindings();
}
this.run = function () {
//THIS WORKS TOO
requestAnimFrame(this.update);
}
this.update = function () {
//BAD! THROWS UNDEFINED IS NOT A FUNCTION
//HERE I NEED TO USE A REFERENCE HERE
this.processInput();
this.renderer.render(this.stage);
this.handleLogic();
//EVEN THIS ONE WON'T WORK, BUT IT WORKED IN init()!
requestAnimFrame(this.update);
};
//METHODS ARE DEFINED THE SAME WAY
this.processInput = function () {
...
};
this.handleLogic = function () {
...
};
this.setKeyBinding = function () {
...
}
}
所以我明显遗漏了一些东西:
this.setKeybindings()从init方法中成功执行。
this.processInput()抛出错误。
我不需要解决方法,我使用本地参考解决了这个问题,如下所示:
function Game () {
var reference = this;
.......
this.update = function () {
//NOW WORKS
reference.processInput();
reference.handleLogic();
reference.renderer.render(reference.stage);
requestAnimFrame(reference.update);
}
this.init = function () {
//THIS ONE WORKS EVEN USING 'this'
this.setKeyBindings()
}
}
我想知道为什么'这个'仅适用于某些方法(如init),而不适用于其他方法(如更新)。
答案 0 :(得分:0)
声明局部变量并为其指定此并在任何地方使用它:
function Game () {
var me = this;
.......
me.update = function () {
me.processInput();
me.handleLogic();
me.renderer.render(me.stage);
requestAnimFrame(me.update);
}
}
这将解决您的参考问题