我在gamedev.stackexchange上发布了这个,但是在这里提到了,所以我会试试。我有一个简单的菜单,它是一个函数,mainmenu.prototype.Render将它绘制到屏幕上。在mainmenu函数中,我想创建一个包含按钮x,y位置和.src的对象数组。
这是我当前的代码,所以函数本身没问题:
this.Mainmenu = function() {
}
this.Mainmenu.prototype.Render = function() {
imgPause = new Image();
imgPause.src = 'img/pause.png';
c.drawImage(imgPause, canvas.width - 42, 10);
}
var mainmenu = new self.Mainmenu();
我希望最终结果看起来像,但无法开始工作(我在评论中包含了错误):
this.Mainmenu = function() {
this.button = function(src, X, Y) {
this = new Image(); // Gives error "Invalid left-hand side in assignement"
this.src = src;
this.X = X;
this.Y = Y;
}
this.buttons = [pause = new this.button(src, X, Y)];
}
this.Mainmenu.prototype.Render = function() {
for (i = 0; i < this.buttons.length; i++) {
c.drawImage(this.src, this.X, this.Y);
}
}
var mainmenu = new self.Mainmenu();
但它不起作用,如果有人能够确定我的错误在哪里会受到赞赏,我的耐心即将耗尽。
答案 0 :(得分:2)
好吧,你的错误正是你的js口译员所说的 - 你的作业左侧无效。也就是说,您无法将this
分配给任何内容,这是所有具有this
字词的语言的经验法则。这背后的原因很明显 - this
表示函数的当前上下文,它的隐含参数。如果你可以动态地覆盖它,你可以改变使用你的每个函数的行为,从而改变整个程序。
如何以这种破碎方式使用this
:
this.MainMenu = function() {
this.Button = function(src, X, Y) {
var image = new Image();
image.src = src;
image.X = X;
image.Y = Y;
return image;
}
this.buttons = [pause = new this.Button(src, X, Y)];
}
另外,使用PascalCase(Button
而不是button
)命名您的类,并使用camelCase命名您的变量(x
,而不是X
)。
答案 1 :(得分:0)
你不能这样做
this.button = function(src, X, Y) {
this = new Image(); // Gives error "Invalid left-hand side in assignement"
}
this
代表Mainmenu
的当前实例。您无法覆盖另一个实例
实例。
没意义。