2016-12-31 48 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,原型和構造如何彼此相關的,以及它們如何工作。