我想創建狀態對象。它可以有值一樣pending
,session
,rejected
,cancelled
...JS中的數據結構允許從定義的值中選擇一個值?
我要訪問它像status.isSession();
,status.isPending()
... etc`
,但我想給它分配這樣status.toPending();
,status.toSession();
這樣就沒有拼寫錯誤的餘地。
我認爲這是動態編程。
我想創建狀態對象。它可以有值一樣pending
,session
,rejected
,cancelled
...JS中的數據結構允許從定義的值中選擇一個值?
我要訪問它像status.isSession();
,status.isPending()
... etc`
,但我想給它分配這樣status.toPending();
,status.toSession();
這樣就沒有拼寫錯誤的餘地。
我認爲這是動態編程。
您可以在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');
真正在您的控制檯。
但是,這是非常灰心,因爲是黑客,你可能會得到奇怪的錯誤,所以我建議遠離。
爲什麼你需要它可以這樣訪問。你不能只是有'status.get()'和'status.set(status.inprogress)'? – FCin
「im open to status.session()如果我不必爲每個狀態分別定義函數」你是什麼意思? @FCin的解決方案將允許你只用一個函數來實現這一點,你獲取新的狀態並將其作爲參數傳遞給'set',然後將該參數設置爲true,將所有其他對象設置爲false。 – Taurus
我更新了問題 –