Javascript JS中的什么数据结构允许从定义的值中选择一个值?
我想创建状态对象。其值可以是Javascript JS中的什么数据结构允许从定义的值中选择一个值?,javascript,data-structures,metaprogramming,dynamic-programming,Javascript,Data Structures,Metaprogramming,Dynamic Programming,我想创建状态对象。其值可以是挂起,会话,拒绝,取消 我想像访问status.isSession()一样访问它,状态。isPending()。。。等` 但是我想这样分配它status.toPending(),状态.toSession() 这样就没有拼写错误的余地 我认为这是动态编程。您可以在JavaScript中实现这一点,但它只适用于双相等 可以使用以下构造函数创建对象: function Status(value){ this.session = true; this.value =
挂起
,会话
,拒绝
,取消
我想像访问status.isSession()一样访问它代码>,状态。isPending()
。。。等`
但是我想这样分配它status.toPending()代码>,状态.toSession()代码>
这样就没有拼写错误的余地
我认为这是动态编程。您可以在JavaScript中实现这一点,但它只适用于双相等
可以使用以下构造函数创建对象:
function Status(value){
this.session = true;
this.value = value;
}
现在,如果创建此对象的实例:
const status = new Status('session');
确保status.session返回true,status.value返回“session”
现在可以重写此对象的toString()方法,使其返回status.value
Status.prototype.toString = function(){
return this.value;
}
原因是,当您尝试将对象与原语进行比较时,引擎将尝试将它们置于“值上下文”中,并通过调用.toString()
操作将对象强制为字符串
果不其然,这将产生:
const status = new Status('session');
console.log(status == 'session');
在你的控制台里有一个真实的
但这是非常不鼓励的,因为这是一种黑客行为,您可能会遇到奇怪的bug,所以我建议您远离它。您可以在JavaScript中实现这一点,但它只适用于双相等
可以使用以下构造函数创建对象:
function Status(value){
this.session = true;
this.value = value;
}
现在,如果创建此对象的实例:
const status = new Status('session');
确保status.session返回true,status.value返回“session”
现在可以重写此对象的toString()方法,使其返回status.value
Status.prototype.toString = function(){
return this.value;
}
原因是,当您尝试将对象与原语进行比较时,引擎将尝试将它们置于“值上下文”中,并通过调用.toString()
操作将对象强制为字符串
果不其然,这将产生:
const status = new Status('session');
console.log(status == 'session');
在你的控制台里有一个真实的
但这是非常不鼓励的,因为这是一种黑客行为,您可能会遇到奇怪的bug,所以我建议您远离它。为什么您需要这样访问它。你不能只拥有例如status.get()
和status.set(status.inprogress)
?“如果我不必为每个状态单独定义函数,我可以使用status.session()”这是什么意思@FCin的解决方案只需一个功能即可实现这一点,将新状态作为参数传递给set
,然后将该参数设置为true,将所有其他对象设置为false。我更新了question@MuhammadUmer更新问题中的要求与原始问题文本中的要求不同,是吗?看不,我说得很清楚,为什么你需要这样才能访问它。你不能只拥有例如status.get()
和status.set(status.inprogress)
?“如果我不必为每个状态单独定义函数,我可以使用status.session()”这是什么意思@FCin的解决方案只需一个功能即可实现这一点,将新状态作为参数传递给set
,然后将该参数设置为true,将所有其他对象设置为false。我更新了question@MuhammadUmer更新问题中的要求与原始问题文本中的要求不同,是吗?看不,我说得很清楚