0

我在 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();

但这不起作用,如果有人能找出我的错误在哪里,将不胜感激,我的耐心即将耗尽。

4

2 回答 2

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, not button) 命名你的类,用 camelCase EVERYWHERE ( x, not X) 命名你的变量。

于 2013-09-29T21:04:40.940 回答
0

你不能做这个

this.button = function(src, X, Y) {
    this = new Image(); // Gives error "Invalid left-hand side in assignement"
}

this表示 的当前实例Mainmenu。您不能用另一个实例覆盖一个实例。没有意义。

于 2013-09-29T21:01:54.630 回答