2014-03-07 23 views
0

序言:我對JavaScript有點新鮮。我目前正在與CraftyJS建立一個遊戲(如果有的話)。我正在製作類似於RPG的東西。JavaScript中的子類/接口的等價物

我想模擬一組可以指定給用戶的消息類型。這些可以是:

  • 一個簡單的文本消息(reference
  • 與化身圖像的文本消息(reference
  • 文本消息和一堆選擇(reference
  • 可能更多種類型的在未來

在像C#或Java這樣的語言下,我可能會選擇將此模型設置爲Message類(可能會爲頭像/ cho冰)或子類,或作爲我的特定消息類型實現的接口。

在Javascript中,類的結構有所不同。對此進行建模的正確方法是什麼?我現在看到幾個選項:

  • 只有一堆字段的匿名對象,例如。 { text: "blah", choices: [ ... ] }
  • 某種類,例如。 new Message(text, avatar, choices)
  • 插入這裏

的選擇,因爲我的比賽是數據驅動的,用戶將創建JSON(可能通過手)和指定信息領域。類的一個小優點是我強制用戶在構造函數中指定所有必要的字段(儘管如果我只使用匿名對象,我仍然可以在沒有類的情況下驗證消息)。

什麼是我的選擇和折衷(或者我應該使用什麼設計這裏?)

回答

0

如果消息「設施」是開放的(「可能更多類型的未來」),那麼你可能想調查了不同的方法:

有一類用戶界面暴露適當的方法來操縱它,例如:

function MessageUi() { 
    .... 
} 

MessageUi.prototype.setText = function(text) { ... } 
MessageUi.prototype.setPicture = function(imgUrl) { ... } 
MessageUi.prototype.setChoices = function(choicesArray) { ... } 
MessageUi.prototype.show = function(callback) { ... } 
// and so on 

實行單一的方法類是必需的消息,說render(ui)。示例用法是:

  • 對於簡單的文本大小寫:

    var msg = { 
        render: function(ui) { 
         ui.setText("My daddy used to hide..."); 
         ui.show(); // no callback; clicking just goes on 
        } 
    }; 
    
  • 對於選擇的情況:

    var msg = { 
        render: function(ui) { 
         ui.setText("Maria! So nice to meet you!"); 
         ui.setChoices([ 
          {value: 1, text: "Yes, sir. Very nice to meet you...."}, 
          ... 
         ]); 
         ui.show(function(choice) { // callback gets selected choice 
          ... 
         }); 
        } 
    }; 
    

由於需要新的類型的消息,該現有的不需要修改。您將只有方法添加到MessageUi,並且新的消息類型將使用它們。

只是有些想法,這不是一個「最終」的解決方案(問題是相當開放的)。玩開發遊戲!

+0

要明確一點,你所倡導的是具有所有相關屬性的單個類? – ashes999

+0

用於UI。對於消息,任何方法都可以。如果它是一次性的事情,就像上面我的代碼那樣內聯。如果可以重複使用相同的消息(想到簡單的文本消息),或者定製或具有複雜行爲,則該消息的類將是適當的。 –