在 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/