javascript中许多构造函数参数的替代品

时间:2013-03-28 09:10:39

标签: javascript

基本上我试图弄清楚如何避免在javascript中的构造函数中有很多参数。原因是我和朋友一起制作了一个基于太空的游戏以获得乐趣,这些游艇都是以模块为基础的。目前他们可以拥有引擎和许多传感器,武器和殖民地模块。可能会有更多。每艘船都是根据规格建造的,所以为了制造一艘船,你只需给它一个规格,船的构造者就可以处理其余的船。但是在制作规范时我需要提供模块。我想避免的是这样做:

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

我不确定最佳解决方案是什么。目前我有一个访问者模式解决方案,其中每个模块都有一个“注册”方法。这个方法有一个参数,然后用该参数注册自己(如果模块是武器,它调用注册武器的方法,如果它是一个传感器,它调用注册传感器的方法等)。那么我就可以做到:

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

然而,我觉得它可能有点复杂。也许。我有一种不幸的能力,有时会使事情复杂化。创建规范然后在创建后将模块添加到它中会更好吗?或者这个解决方案好吗?还有另一个解决这个问题的方法吗?

我们计划让玩家可以创建规格并修改现有的规格,所以我想以一种好的方式让它变得容易。

保重, 克尔

1 个答案:

答案 0 :(得分:12)

考虑使用spec对象作为构造函数参数:

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

这样:

  • 构造函数参数已命名,因此掌握起来要简单得多。
  • 可以按任何顺序给出参数。
  • 你可以省略一些论点。