0

我想創建狀態對象。它可以有值一樣pendingsessionrejectedcancelled ...JS中的數據結構允許從定義的值中選擇一個值?

我要訪問它像status.isSession();status.isPending() ... etc`

,但我想給它分配這樣status.toPending();status.toSession();

這樣就沒有拼寫錯誤的餘地。

我認爲這是動態編程。

+0

爲什麼你需要它可以這樣訪問。你不能只是有'status.get()'和'status.set(status.inprogress)'? – FCin

+0

「im open to status.session()如果我不必爲每個狀態分別定義函數」你是什麼意思? @FCin的解決方案將允許你只用一個函數來實現這一點,你獲取新的狀態並將其作爲參數傳遞給'set',然後將該參數設置爲true,將所有其他對象設置爲false。 – Taurus

+0

我更新了問題 –

回答

2

您可以在JavaScript中實現此功能,但只能使用double equals。

您可以創建這樣與構造一個對象:如果您創建此對象的實例

function Status(value){ 
    this.session = true; 
    this.value = value; 
} 

現在:

const status = new Status('session'); 

果然status.session將返回true和status.value將返回'會話'。

現在,您可以覆蓋這個對象的toString()方法,因此返回status.value

這樣做的原因是,當你嘗試比較對象VS原始,引擎將嘗試將它們放在'value context'中,並通過調用.toString()操作將對象強制爲String。果然

這將產生:

const status = new Status('session'); 
console.log(status == 'session'); 

真正在您的控制檯。

但是,這是非常灰心,因爲是黑客,你可能會得到奇怪的錯誤,所以我建議遠離。

相關問題