Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS中的什么数据结构允许从定义的值中选择一个值?_Javascript_Data Structures_Metaprogramming_Dynamic Programming - Fatal编程技术网

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更新问题中的要求与原始问题文本中的要求不同,是吗?看不,我说得很清楚