【发布时间】:2013-06-27 11:56:22
【问题描述】:
我在 javascript 中有多个 可食用 类,例如:食物、饮料、零食。 每个此类都需要一组不同的参数。我有另一个工厂类,它创建一个发送给它的可食用项目的实例。
我无法弄清楚我们如何使用这个工厂动态选择可食用项目并传递参数(以数组形式)?
我想出了两个解决方案 - 解决方案 1:
var factory = function(eatable, argumentList){
var obj = new eatable(argumentList);
return obj
};
这是个问题,因为argumentList是一个数组。
解决方案 2
var factory = function(eatable, argumentList){
var obj = eatable.apply({}, argumentList);
return obj
};
这并没有真正创建可食用类型的对象。
我真正想要的效果 假设我能够将 argumentList 转换为 js 参数类型对象 -
var obj = new eatable(argumentList.toArguments());
obj instanceOf eatable; // should return true
请帮忙!
【问题讨论】:
-
如果您必须将对所需“类”的引用和参数列表都传递给工厂函数,那么它的意义何在?
-
我有一长串要初始化的类。我不想手动编写代码来初始化它们,而是传递一个包含类引用和必须提供给构造函数的参数的数组。
-
是的,但是鉴于您当前可能的两种解决方案基本上都是单行函数(不包括 return 语句),您也可以在处理数组的任何循环中只使用这一行。 (虽然是的,但我知道您对这些解决方案不满意。)
-
其实这就是我正在做的。为列表中的每个项目调用工厂方法。
-
我明白这一点。我是说当它的(非常短的)主体可以直接进入你的循环时,工厂函数似乎是多余的。我想您不想更改您的构造函数,以便他们可以接受一个数组,而您可以使用解决方案 1?
标签: javascript oop factory