我需要創建命名常量。如何在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