以枚举值作为参数的 Javascript 构造函数

标签 javascript constructor module prototype enumeration

我想创建一个对象,它可以将一组固定的输入字符串中的一个作为构造函数中的参数。为了限制可能的字符串,我想使用枚举类型的构造。

到目前为止,我的解决方案依赖于两个独立的函数:一个使用 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/

相关文章:

javascript - ES6 Koa.js 运行生成器函数完成并异步返回

javascript - 日期选择器持续时间的问题

javascript - 如何使用变量作为构造函数属性?

java - new int[]{} 与 {} 之间的区别

javascript - 当我的模型更新时,AngularJS 1.4.8 在 select 中创建一个空选项

javascript - Ember RESTAdapter 命名空间可以继承吗?

java - 引用另一个类中的方法

python - 如何在其他模块上下文中执行代码

python - Windows python setup.py install 不分发模块 python 文件

python - 模块导入错误,如何刷新Ipython session ?