此关键字和游戏状态

时间:2016-12-31 21:35:08

标签: javascript

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

例如,如果我控制日志'这个'它显示对象 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);
    }

};

1 个答案:

答案 0 :(得分:1)

  

如果我控制日志'this'它会显示对象MyGame.StateB“

我认为你对控制台“命名”对象的方式感到困惑。请看以下示例:

enter image description here

即使记录f显示Foo {},但这并不意味着fFoo相同,正如f === Foo的结果所示}。控制台只是尝试为f引用的对象提供“名称”。您必须将此读作“对象是类型 Foo”或“对象是由 Foo构建的”。

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

因此,由于thisMyGame.StateB不相同,因此替换它们没有意义。

我建议您阅读YDKJS - this & Object prototypes,详细了解this,原型和构造函数之间的关系以及它们的工作原理。