Javascript中的子类化/接口的等价物

时间:2014-03-07 14:22:19

标签: javascript

序言:我对Javascript有点新鲜。我目前正在与CraftyJS建立游戏(如果重要的话)。我正在制作类似于RPG的东西。

我想为一组可以指定向用户显示的消息建模。这些可以是:

  • 一条简单的短信(reference
  • 包含头像图片(reference
  • 的短信
  • 短信和一系列选择(reference
  • 未来可能会有更多类型

在像C#或Java这样的语言中,我可能会选择将其建模为Message类(可能包含头像/选择的字段),或者使用子类,或者作为我的特定消息类型的接口实施

在Javascript中,类的结构不同。对此进行建模的正确方法是什么?我现在看到几个选项:

  • 只有一堆字段的匿名对象,例如。 { text: "blah", choices: [ ... ] }
  • 某种类,例如。 new Message(text, avatar, choices)
  • 在此处插入选项

由于我的游戏是数据驱动的,因此用户将创建JSON(可能是手动)并指定消息字段。类的一个小优点是,我强制用户在构造函数中指定所有必需的字段(尽管如果我只使用匿名对象,我仍然可以验证没有类的消息)。

我有哪些选择和权衡(或者我应该在这里使用什么设计?)

1 个答案:

答案 0 :(得分:0)

如果消息“facility”已打开(“将来可能会有更多类型”),那么您可能想要研究一种不同的方法:

有一个用户界面的类,它暴露了适当的方法来操纵它,例如:

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,新的消息类型将使用它们。

只是一些想法,这不是一个“最终”解决方案(问题是完全开放的)。玩得开心玩游戏吧!