我想创建一个对象,它可以将一组固定的输入字符串作为构造函数中的参数。为了约束可能的字符串,我想使用枚举类型的结构。
到目前为止我所拥有的解决方案依赖于两个独立的功能:一个使用Revealing Module模式(我认为)来公开固定的字符串集,如下所示:
var MyEnum = (function() {
var stringA = "string A";
var stringB = "string B";
var stringC = "string C";
return {
stringA: stringA,
stringB: stringB,
stringC: stringC
};
})();
第二个函数将字符串值之一(以及其他值)作为输入作为构造的参数。例如,给定一个名为MyObject的函数,这就是我所说的:
var myInstance = new MyObject(MyEnum.stringB, 42, "blue");
我想知道的是:是否有一个将MyEnum和MyObject结合到一个实体中的替代架构?其他任何东西都没有使用MyEnum,但这是我能找到让MyObject构造函数可以使用字符串实例的唯一方法。
我尝试通过MyObject上的原型方法以某种方式使枚举值可用,但问题是该方法不存在"直到对象被实例化。
对于背景,我来自C#的土地,所以我知道我的思想偏向于这个方向,也许解决方案更多的是心理而非技术。
感谢任何帮助。
编辑:有人指出这里不需要揭示模块模式,我理解并同意这一点。这是早期尝试解决这个问题的一个退化结构。此时,我不知道是否更喜欢编辑RM模式(因为它与问题无关)或者此编辑是否足够。我更喜欢隐藏自己的耻辱,但我也有一个错误...
答案 0 :(得分:3)
您可以将static
属性附加到函数对象:
function Painter(color) {
}
Painter.Color = {
RED: "color_red",
BLUE: "color_blue"
};
var painter = new Painter(Painter.Color.BLUE);
在定义枚举时不需要显示模式,因为无论如何你都暴露了所有内容。
答案 1 :(得分:0)
如果您希望将所有这些内容封装在同一个对象中,您可以遵循一切都是对象
的方法//constructor definition
function Contructor(arg1, arg2) {
//use Contructor.values
//implementation
}
//defines the set of values as a property of the constructor
Contructor.values = {
stringA: "string A",
stringB: "string B",
stringC: "string C"
};
或者如果你想把它作为一个参数传递:
//constructor definition
function Contructor(value, arg1, arg2) {
//implementation
}
var obj = new Contructor(Contructor.values.stringA, 42, "blue");