2

基本的に、javascript のコンストラクターで多くの引数を使用しないようにする方法を見つけようとしています。その理由は、趣味で友人と宇宙ベースのゲームを作っていて、船はモジュール ベースだからです。現時点では、エンジンと多くのセンサー、武器、コロニー モジュールを搭載できます。おそらくもっと来るでしょう。各船は仕様に基づいて構築されているため、船を作成するには仕様を指定するだけで、残りは船のコンストラクターが処理します。しかし、仕様を作成するときは、モジュールを提供する必要があります。私が避けたいのは、これを行うことです:

ShipSpec = function(civ, name, hull, engine, sensors, weapons, colony, ...) {}

そして、最善の解決策が何であるかはわかりません。現時点では、各モジュールに「登録」メソッドがあるビジター パターン ソリューションがあります。このメソッドには 1 つの引数があり、その引数で自身を登録します (モジュールが武器の場合は武器を登録するメソッドを呼び出し、センサーの場合はセンサーを登録するメソッドを呼び出します)。それで、私はできる:

ShipSpec = function(civ, name, hull, engine, modules) {}

とはいえ、ちょっと複雑な気もします。多分。私は時々物事を少し複雑にする不幸な能力を持っています. 仕様を作成し、作成後にモジュールを追加する方がよいでしょうか? または、このソリューションは問題ありませんか?この問題の別の解決策はありますか?

そして、プレイヤーが仕様を作成したり、既存の仕様を変更したりできるようにする予定なので、良い意味で簡単にできるようにしたいと考えています。

気をつけて、カー

4

1 に答える 1

12

spec オブジェクトをコンストラクター引数として使用することを検討してください。

var spec = {
  civ: "...",
  name: "...",
  hull: "...",
  ...
};
ShipSpec = function(spec) {}

こちらです:

  • コンストラクターの引数には名前が付けられているため、はるかに簡単に把握できます。
  • 引数は任意の順序で指定できます。
  • 一部の引数は省略できます。
于 2013-03-28T09:12:42.927 に答える