我正在查看Phaser游戏框架,无法确定此关键字所指的内容。

例如,如果我在控制台日志“ this”中显示对象MyGame.StateB。但是,如果我用MyGame.StateB替换此关键字,例如
MyGame.StateB.background,应用程序引发错误。谁能解释我的不了解?

MyGame.StateB = function (game) {

    this.background;
    this.girls;


};

MyGame.StateB.prototype = {

    create: function () {

        this.background = this.add.sprite(0, 150, 'background');

        this.girls = this.add.sprite(0, 150, 'anizeen');
        console.log(this); // MyGame.StateB
        var tween = this.add.tween(this.background).to( { x: -800 }, 8000, "Linear", true, 0, -1, true);
    }

};

最佳答案

如果我控制台登录“ this”,则显示对象MyGame.StateB“


我认为您对控制台如何“命名”对象感到困惑。看下面的例子:

javascript - 这个关键字和游戏状态-LMLPHP

即使登录f显示Foo {},也不意味着f是相同的Foo,如f === Foo的结果所示。控制台只是尝试为f引用的对象指定一个“名称”。您必须将其读为“对象的类型为Foo”或“对象是由Foo构造的”。

因此,在您的代码中,this指的是由MyGame.StateB构造的对象。调用MyGame.StateB,创建并返回一个新对象。 background是该对象的属性,而不是MyGame.StateB本身的属性。因此,MyGame.StateB.backgroundundefined



因此,由于thisMyGame.StateB不相等,因此用它们代替是没有意义的。

我建议阅读YDKJS - this & Object prototypes,以详细了解this,原型和构造函数如何相互关联以及它们如何工作。

07-26 02:45