将变量的值限制为有限的字符串集?

时间:2016-03-21 02:25:33

标签: javascript

在我的代码中,我有一些操作的“模式”。我们只称它们为“mode1”,“mode2”和“mode3”。

我希望能够从代码的不同部分更改和访问当前模式。

我可以将模式作为字符串分配给变量。例如:

var mode = "mode1";
...
if (mode === "mode3") {
    ...
}

......等等。 但是,我想确保我不会意外地将模式的值设置为像“mode4”这样的超出范围的东西,或像“asdf”那样完全不可接受的东西。我想将变量的值限制为有限的字符串集:{“mode1”,“mode2”,“mode3”}

在JavaScript中执行此操作的最佳方法是什么?

2 个答案:

答案 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