我正在查看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);
}
};
答案 0 :(得分:1)
如果我控制日志'this'它会显示对象MyGame.StateB“
我认为你对控制台“命名”对象的方式感到困惑。请看以下示例:
即使记录f
显示Foo {}
,但这并不意味着f
与Foo
相同,正如f === Foo
的结果所示}。控制台只是尝试为f
引用的对象提供“名称”。您必须将此读作“对象是类型 Foo
”或“对象是由 Foo
构建的”。
因此,在您的代码中,this
引用MyGame.StateB
构造的对象。调用了MyGame.StateB
,创建并返回了一个新对象。 background
是 对象的属性,而不是MyGame.StateB
本身的属性。因此,MyGame.StateB.background
为undefined
。
因此,由于this
和MyGame.StateB
不相同,因此替换它们没有意义。
我建议您阅读YDKJS - this & Object prototypes,详细了解this
,原型和构造函数之间的关系以及它们的工作原理。