我最近开始学习 JavaScript 以创建 HTML5 游戏,我遇到了一种我很难理解的行为。
例如,我有一个构造函数,它使用一系列动作来初始化新精灵,这些动作应该在每次游戏更新时执行(例如动画、移动等)。这个 JSFiddle演示了一个基本的实现。
本质上,我很困惑为什么这不起作用......
Sprite = function () {
this.actions = [this.animate];
};
Sprite.prototype = {
animate: function () { /* animate the sprite */ },
update: function () {
this.actions[0](); // doesn't do anything (?)
}
};
...但这确实
Sprite = function () {
this.actions = [this.animate];
this.holder = 'whatever';
};
Sprite.prototype = {
animate: function () { /* animate the sprite */ },
update: function () {
this.holder = this.actions[0];
this.holder(); // executes animate function as desired
}
};
在我没有经验的眼里,这两个例子似乎都应该做同样的事情。那么为什么如果我this.actions[0]()
直接调用什么都没有发生,但是如果我分配this.actions[0]
给this.holder
然后调用this.holder()
,它就可以了?