我想创建一个对象,它可以将一组固定的输入字符串中的一个作为构造函数中的参数。为了限制可能的字符串,我想使用枚举类型的构造。
到目前为止,我的解决方案依赖于两个独立的函数:一个使用 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 上的原型(prototype)方法使枚举值可用,但问题是该方法在对象被实例化之前不会“存在”。
对于背景,我来自 C# 领域,所以我知道我的想法偏向于那个方向,也许解决方案更多的是心理上的而不是技术上的。
感谢任何帮助。
编辑: 有人指出这里不需要显示模块模式,我理解并同意这一点。这是早期解决此问题的尝试中留下的残余结构。在这一点上,我不知道编辑 RM 模式是否更好(因为它与问题无关)或者这种编辑是否足够。我宁愿隐藏我的耻辱,但我也可以承认一个错误......
最佳答案
您可以将static
属性附加到函数对象:
function Painter(color) {
}
Painter.Color = {
RED: "color_red",
BLUE: "color_blue"
};
var painter = new Painter(Painter.Color.BLUE);
定义枚举时不需要显示模式,因为无论如何您都会公开所有内容。
关于以枚举值作为参数的 Javascript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850675/