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'); 

真正在您的控制台。

但是,这是非常灰心,因为是黑客,你可能会得到奇怪的错误,所以我建议远离。

相关问题