2016-12-31 173 views
0

我正在查看Phaser游戏框架,但无法计算出这个关键字引用的内容。此关键字和游戏状态

例如,如果我控制台登录'这'它显示对象MyGame.StateB。但是,如果我用MyGame.StateB替换this关键字,例如 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); 
    } 

}; 
+2

你是怎么调用'create'函数的? – MinusFour

+3

错误说的是什么?应该帮助你理解......错误消息是非常丰富的 – charlietfl

+0

当stateB启动时(game.state.add('StateB',MyGame.StateB);),调用create函数。错误是 - '未捕获的ReferenceError:在赋值中无效的左手' – stckpete

回答

1

if I console log 'this' it displays the object MyGame.StateB"

我认为你正在通过怎样控制台“名称”对象混淆。请看下面的例子:

enter image description here

即使登录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,原型和构造如何彼此相关的,以及它们如何工作。