2014-03-14 8 views
1

我下面這個melon JS tutorial,並在上午3部分。melonJS在使用不清楚「這個」,構造調用

我不是一對夫婦的事情講清楚這個代碼段

首先,你在我的「遊戲」對象中創建一個名爲「PlayerEntity」的新成員,它擴展了melonJS(me)對象實體類。我明白了。但我不明白

1)this是指「遊戲」對象?

2)如果是這樣,那麼this.parent就是指「遊戲」的父親 - 這是它繼承的ObjectEntity類嗎?

3)爲什麼我不能從外部呼叫game這樣的對象?它說它沒有方法init,即使我已經在game.PlayerEntity {}對象中定義了一個。

game.PlayerEntity.init(1, 2, 3); 

4)如果你正在調用this.parent(x, y, settings)構造,其中被x, y, settings參數被設置?使用Java,調用構造函數這樣:

public Bicycle(int val1, int val2) { 
    myVal1 = val1; 
    myVal2 = val2; 
} 

然後創建新的類實例:

Bicycle bike = new Bicycle(1, 2); 

因此,當您創建實例自行車的構造函數被調用。

但是有了這個,我不清楚this.parent(x, y, settings);是如何「調用構造函數」的。

謝謝!

+0

我認爲這是指PlayerEntity和this.parent指ObjectEntity。 – tchow002

回答

1

該約定最初由John Resig描述。事實上,它甚至在melonJS文檔中提到了他。

繼承發生在.parent派生即將發揮的地方。基本上發生了什麼是this是指您的當前對象,在這種情況下是PlayerEntity

擴展不是一個內置函數,並且在幕後做某些事情 - 其中一個是修改屬性.parent以引用「超級類」。您可以在源代碼中

Object.extend = function(prop) { 
    // _super rename to parent to ease code reading 
    var parent = this.prototype; 

看到這一點,因爲PlayerEntity實質上延長ObjectEntity,這是什麼調用

this.parent(x, y, settings); 

ObjectEntity被稱爲與3個參數(X,Y,設置期間發生)使用繼承來構造基礎屬性和狀態。

melonJS在GitHub上的源代碼:https://github.com/melonjs/melonJS/blob/master/src/core.js

+0

太棒了!謝謝。幾個問題。1)雖然定義了'x,y,settings' params? 2)爲了保留繼承,我不能只使用ObjectEntity.apply(this,arguments);'在PlayerEntity中? 3)如何調用init?我沒有在這裏找到'init'作爲ObjectEntity類的成員http://melonjs.github.io/docs/me.ObjectEntity.html – Growler