我想创建状态对象。它可以有值一样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
我更新了问题 –