基本上我试图弄清楚如何避免在javascript中的构造函数中有很多参数。原因是我和朋友一起制作了一个基于太空的游戏以获得乐趣,这些游艇都是以模块为基础的。目前他们可以拥有引擎和许多传感器,武器和殖民地模块。可能会有更多。每艘船都是根据规格建造的,所以为了制造一艘船,你只需给它一个规格,船的构造者就可以处理其余的船。但是在制作规范时我需要提供模块。我想避免的是这样做:
ShipSpec = function(civ, name, hull, engine, sensors, weapons, colony, ...) {}
我不确定最佳解决方案是什么。目前我有一个访问者模式解决方案,其中每个模块都有一个“注册”方法。这个方法有一个参数,然后用该参数注册自己(如果模块是武器,它调用注册武器的方法,如果它是一个传感器,它调用注册传感器的方法等)。那么我就可以做到:
ShipSpec = function(civ, name, hull, engine, modules) {}
然而,我觉得它可能有点复杂。也许。我有一种不幸的能力,有时会使事情复杂化。创建规范然后在创建后将模块添加到它中会更好吗?或者这个解决方案好吗?还有另一个解决这个问题的方法吗?
我们计划让玩家可以创建规格并修改现有的规格,所以我想以一种好的方式让它变得容易。
保重, 克尔
答案 0 :(得分:12)
考虑使用spec对象作为构造函数参数:
var spec = {
civ: "...",
name: "...",
hull: "...",
...
};
ShipSpec = function(spec) {}
这样: