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