javascript中许多构造函数参数的替代方案
基本上,我试图找出如何避免javascript中的构造函数中有大量参数。原因是我正在和一个朋友玩一个基于太空的游戏,飞船是基于模块的。目前,他们可以拥有一个引擎和许多传感器、武器和殖民地模块。可能还会有更多。每艘飞船都是根据一个规范建造的,所以要建造一艘飞船,你只需要给它一个规范,其余的由飞船的建造师来处理。但在制定规范时,我需要提供模块。我想避免的是这样做:javascript中许多构造函数参数的替代方案,javascript,Javascript,基本上,我试图找出如何避免javascript中的构造函数中有大量参数。原因是我正在和一个朋友玩一个基于太空的游戏,飞船是基于模块的。目前,他们可以拥有一个引擎和许多传感器、武器和殖民地模块。可能还会有更多。每艘飞船都是根据一个规范建造的,所以要建造一艘飞船,你只需要给它一个规范,其余的由飞船的建造师来处理。但在制定规范时,我需要提供模块。我想避免的是这样做: ShipSpec = function(civ, name, hull, engine, sensors, weapons, colon
ShipSpec = function(civ, name, hull, engine, sensors, weapons, colony, ...) {}
我不确定最好的解决方案是什么。目前我有一个访问者模式解决方案,其中每个模块都有一个“register”方法。此方法有一个参数,然后使用该参数注册自身(如果模块是武器,则调用注册武器的方法;如果模块是传感器,则调用注册传感器的方法等)。那么我可以做:
ShipSpec = function(civ, name, hull, engine, modules) {}
不过,我觉得可能有点复杂。大概我有一种不幸的能力,有时会把事情复杂化一点。创建一个等级库,然后在创建之后将模块添加到等级库中,这样会更好吗?或者这个解决方案可以吗?这个问题还有别的解决办法吗
我们计划让玩家可以创建规格,也许可以修改现有的规格,所以我想用一种好的方式让它变得容易
保重,,
Kerr考虑使用spec对象作为构造函数参数:
var spec = {
civ: "...",
name: "...",
hull: "...",
...
};
ShipSpec = function(spec) {}
这样:
- 构造函数参数是命名的,因此更容易掌握
- 论点可以按任何顺序给出
- 你可以提出一些论点