如何优雅地将布尔值和整数建模为一个?

时间:2019-07-16 10:45:21

标签: javascript node.js object

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

所以我有

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

现在,我想知道如何以一种优雅的方式对此进行建模。您可以想到的最简单的方法(也是最明确的方法)是具有两个属性:

isProcessing: false,
isProcessingUntil: 0

您已经可以看到这种方法的缺点:如果未处理对象,则实际上不需要isProcessingUntil属性,因此问题就来了,现在的合理值是多少(也许{{1 }}?)。

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

undefined

然后可以通过诸如以下的内容简单地检查它是否正在被处理的事实:

isProcessingUntil: 0

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

除了这两个选项之外,还有另一种解决此问题的合理方法吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

使用整数:

  • -1(如果未处理对象)
  • <timeout value>(如果正在处理对象)

这种-1或整数方法很常见,如Array.indexOf所示(-1 =未找到,否则:数组中的索引)