javascript - 如何优雅地将 bool 值和整数建模为一个?

标签 javascript node.js object

在 JavaScript 中,我有一个需要处理的对象,并且我需要在该对象上存储它当前是否正在由某个工作人员处理。另外,由于处理支持超时,如果当前正在处理它,我需要将超时存储在对象上。

所以我有:

  • 对象未被处理,
  • 或者对象被处理,然后超时是相关的。

现在我想知道如何以优雅的方式对此进行建模。您能想到的最简单的事情(也是最明确的)就是拥有两个属性:

isProcessing: false,
isProcessingUntil: 0

您已经可以看到这种方法的缺点:如果对象没有被处理,则实际上不需要 isProcessingUntil 属性,因此出现了一个问题,现在的合理值是多少(也许未定义?)。

当然,我们可以将两者合并为一个,并利用任何非零数字都是真值的效果,所以我们也可以说:

isProcessingUntil: 0

当前是否正在处理的事实可以简单地通过以下方式进行检查:

const isProcessing = !Boolean(isProcessingUntil);

同样,这可行,但感觉不优雅。因此,最后,我想避免强制转换(如第二种方法),但我也想避免在某些情况下没有意义的字段。

除了这两个选项之外,还有其他合理的方法来解决这个问题吗?

最佳答案

您可以使用 isProcessingUntil 属性并将 isProcessing 声明为函数属性,因为您知道它依赖于 isProcessingUntil

let process = {
  isProcessingUntil: 0,
  get isProcessing() { return !!this.isProcessingUntil }
}

console.log(process.isProcessing);
process.isProcessingUntil = 1024;
console.log(process.isProcessing);

关于javascript - 如何优雅地将 bool 值和整数建模为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055481/

相关文章:

java - 嵌套对象最佳实践

javascript - 为什么JSON中的对象之间有逗号?

Javascript 循环遍历包含逗号分隔值的数组键

javascript - jquery:将 style.css 的链接替换为 game.css?

javascript - 隐藏具有指定类的最接近的 div

javascript - Google map 错误 : Oops! 出了点问题。此页面未正确加载 Google map

node.js - Docker Express.js由于重定向到HTTPS而无法提供静态文件(也是Fastify的问题)

javascript - 退出并重新启动整个脚本的简单方法?

javascript - map 深入收藏

node.js - Watson IBM 语音转文本 : no interim_result (Node. JS)