在我的代码中,我有一些操作的“模式”。我们只称它们为“mode1”,“mode2”和“mode3”。
我希望能够从代码的不同部分更改和访问当前模式。
我可以将模式作为字符串分配给变量。例如:
var mode = "mode1";
...
if (mode === "mode3") {
...
}
......等等。 但是,我想确保我不会意外地将模式的值设置为像“mode4”这样的超出范围的东西,或像“asdf”那样完全不可接受的东西。我想将变量的值限制为有限的字符串集:{“mode1”,“mode2”,“mode3”}
在JavaScript中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
我提出的一个可能的选择是创建一个包装类:
function Mode() {
var possibleModes = ["mode1", "mode2", "mode3"];
var currentMode = possibleModes[0]; //default
this.setMode = function(mode) {
// Only set value if mode is in finite set of possible modes
if (possibleModes.indexOf(mode) != -1) {
currentMode = mode;
return true;
} else {
throw "Cannot assign out-range-value mode";
return false;
}
}
this.getMode = function() {
return currentMode;
}
}
var mode = new Mode();
那样......
mode.setMode("asdf"); // error
mode.setMode("mode2"); // success
有更好的方法吗?
答案 1 :(得分:0)
另一种选择:
function Mode() {
var possibleModes = ["mode1", "mode2", "mode3"];
var currentMode = possibleModes[0];
Object.defineProperty(this, "value", {
get: function(){
return currentMode;
},
set: function(mode){
if (possibleModes.indexOf(mode) !== -1) {
currentMode = mode;
} else {
throw "Cannot assign out-range-value mode";
}
}
})
};
var mode = new Mode();
那样......
mode.value = "asdf"; // error
mode.value = "mode2"; // success