我刚开始在javascript中使用oop,我遇到了一些问题,试图从另一种方法中访问一个方法。JavaScript对象,自引用问题
这里是我的代码:
var Game = {
initialize: function() {
if (canvas.isSupported()) {
sprites[0] = new Player();
this.update();
}
},
update: function() {
for (var i = 0; i < sprites.length; i++) {
sprites[i].update();
}
this.draw();
},
draw: function() {
this.clear();
for (var i = 0; i < sprites.length; i++) {
sprites[i].draw();
}
setTimeout(this.update, 10);
},
clear: function() {
canvas.context.clearRect(0, 0, canvas.element.width, canvas.element.height);
}
}
但在调用Game.update()给出的是牵引方法没有定义的错误。 我找不到一个真正的解决方案。 最终我发现这个How to call a method inside a javascript object 其中的答案似乎是,我需要安全这个参考文献,如: var _this = this;
但我无法得到那个在文字符号的工作,所以我改变了代码,对象构造函数(我猜这就是它的调用方式)并添加了变量。
我再改
this.draw();
到
_this.draw();
和它的工作。
虽然
this.clear();
和this.update()仍然是相同的,他们似乎从来没有放弃在首位的错误。
任何人都可以解释为什么这是?也许可以指点我一个更好的解决方案? 在此先感谢。
更新
下面是它应该是什么:
var Game = function() {
var _this = this;
this.initialize = function() {
if (canvas.isSupported()) {
sprites[0] = new Player();
this.update();
}
}
this.update = function() {
for (var i = 0; i < sprites.length; i++) {
sprites[i].update();
}
this.draw();
}
this.draw = function() {
this.clear();
for (var i = 0; i < sprites.length; i++) {
sprites[i].draw();
}
setTimeout(function() { _this.update(); }, 10);
}
this.clear = function() {
canvas.context.clearRect(0, 0, canvas.element.width, canvas.element.height);
}
}
你能展示完整的代码吗? – 2011-03-17 13:30:13
+1,真是太棒了,并发布您的更新。这篇文章最后阐述了备用命名空间方法的不同之处。你今天让我成为了一个更好的编码器。 :) – Evildonald 2012-11-16 06:26:01