我需要创建命名常量。如何在javascript中创建枚举
例如:
NAME_FIELD: {
CAR : "car",
COLOR: "color"}
使用:
var temp = NAME_FIELD.CAR // valid
var temp2 = NAME_FIELD.CAR2 // throw exception
最重要,我需要做此枚举的,如果密钥无效
我需要创建命名常量。如何在javascript中创建枚举
例如:
NAME_FIELD: {
CAR : "car",
COLOR: "color"}
使用:
var temp = NAME_FIELD.CAR // valid
var temp2 = NAME_FIELD.CAR2 // throw exception
最重要,我需要做此枚举的,如果密钥无效
现在,自定义getter和setter方法造成的错误在普通的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功能”。你可能不需要这个。
最重要,我需要做此枚举造成的错误,如果密钥无效
不幸的是,你不能。你使用伪枚举的方式是通常的方式,即在对象上创建属性,但是如果你尝试从不包含对象的对象中检索属性,就不能让JavaScript引擎抛出错误存在。相反,引擎将返回undefined
。
你可以通过使用一个函数来做到这一点,这显然有实用性的问题。
或者(和我真的不喜欢这个主意),你可以做这样的事情:
var NAME_FIELD$CAR = "car";
var NAME_FIELD$COLOR = "color";
既然你访问这些免费的标识符,试图读取并不存在的价值:
var temp2 = NAME_FIELD$CAR2;
...以ReferenceError
失败。 (这是真实的,即使在非严格模式代码;在Horror of Implicit Globals仅适用于写作一个自由标识,从一个不读书。)
没有枚举在JavaScript – 2013-02-19 10:37:15
请参阅:HTTP://计算器。 com/questions/287903/enums-in-javascript 我认为它是重复的 – 2013-02-19 10:38:43