在JavaScript中,我有一个需要处理的对象,并且需要在该对象上存储是否当前正在由某些工作人员处理。另外,由于处理支持超时,因此如果当前正在处理,我需要将超时存储在对象上。
所以我有
现在,我想知道如何以一种优雅的方式对此进行建模。您可以想到的最简单的方法(也是最明确的方法)是具有两个属性:
isProcessing: false,
isProcessingUntil: 0
您已经可以看到这种方法的缺点:如果未处理对象,则实际上不需要isProcessingUntil
属性,因此问题就来了,现在的合理值是多少(也许{{1 }}?)。
当然,一个人可以将两者合并为一个,并使用任何非零数为真值的效果,所以我们也可以说:
undefined
然后可以通过诸如以下的内容简单地检查它是否正在被处理的事实:
isProcessingUntil: 0
同样,这可行,但并不优雅。因此,最后,我想避免强制转换(就像在第二种方法中一样),但我也想避免在某些情况下没有意义的字段。
除了这两个选项之外,还有另一种解决此问题的合理方法吗?
答案 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 =未找到,否则:数组中的索引)