2016-03-21 94 views
0

在我的代碼中,我有幾個「模式」的操作。我們稱之爲「mode1」,「mode2」和「mode3」。將變量限制爲一組有限的字符串?

我希望能夠從代碼的不同部分更改和訪問當前模式。

我只能將模式作爲字符串分配給變量。例如:

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

...等等。 但是,我想確保我不會意外地將模式的值設置爲超出範圍(如「mode4」)或某種完全不可接受的內容(如「asdf」)。我想限制變量的值爲字符串的有限集:{「mode1」,「mode2」,「mode3」}

在JavaScript中這樣做的最佳方式是什麼?

+1

你可以有一個功能是設置模式的唯一方法。該函數可以執行必要的驗證(這可以與獲取當前模式的唯一方法的getter函數配對)。 –

回答

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 

有沒有更好的辦法?

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