我正在查看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“
我认为您对控制台如何“命名”对象感到困惑。看下面的例子:
即使登录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
,原型和构造函数如何相互关联以及它们如何工作。