如何在JavaScript中创建枚举

我需要创建命名常量。

例如:

NAME_FIELD: {
            CAR : "car", 
            COLOR: "color"}

使用:

var temp = NAME_FIELD.CAR // valid
var temp2 = NAME_FIELD.CAR2 // throw exception

最重要的是,如果密钥无效,我需要使这个枚举导致错误


最重要的是,如果密钥无效,我需要使这个枚举导致错误

不幸的是,你不能。 你使用伪枚举的方式是通常的方式,即在对象上创建属性,但是如果你尝试从不包含对象的对象中检索属性,就不能让JavaScript引擎抛出错误存在。 相反,引擎会返回undefined

你可以通过使用一个函数来做到这一点,这显然有效用问题。

或者(我真的不喜欢这个想法),你可以做这样的事情:

var NAME_FIELD$CAR = "car";
var NAME_FIELD$COLOR = "color";

既然你会以自由标识符的形式访问这些标识符,试图读取一个不存在的值:

var temp2 = NAME_FIELD$CAR2;

...出现ReferenceError失败。 (即使在非严格模式代码中也是如此;隐式全局的恐怖只适用于写入自由标识符,而不是从一个中读取。)


现在,在纯JavaScript对象中的自定义设置器和获取器已被弃用,解决方案可能是为您的对象和set函数定义一个类:

NAME_FIELD= {
     CAR : "CAR", 
     COLOR: "COLOR"
};

function MyClass(){
}
MyClass.prototype.setProp = function (val) {
  if (!(val in NAME_FIELD)) throw {noGood:val};
  this.prop = val;
}
var obj = new MyClass();

obj.setProp(NAME_FIELD.CAR); // no exception
obj.setProp('bip'); // throws an exception

但是由于枚举不是本地构造,我不确定我会使用这样的东西。 这听起来太过于“试图在JavaScript中强制使用java功能”。 你可能不需要这个。

链接地址: http://www.djcxy.com/p/91777.html

上一篇: How create enum in javascript

下一篇: EXTJS 3 API to convert datetime