如何创建可根据其他一些值自动更新的属性?

时间:2018-07-25 19:40:00

标签: javascript properties

假设我有一个带有一些任意值的对象...

let object = {
  value: 5,
  min: 1,
  max: 100,
  valid: true
}

如果valid属性不在范围内,如何使value属性自动更新?我知道我可以在这样的对象中制作一个getter ...

get valid() {
  if (this.value > this.max || this.value < this.min) {
    return false
  else {
    return true
  }
}

...但是这只会在访问{strong>时更新valid。我需要valid始终根据对象的其他值保持最新。< / p>

通常我最终意识到我对问题的整个思考方式是错误的。这是其中一种吗?例如,我知道如果我使用setter函数来更新所有其他三个对象,则可以使用它们来使valid保持最新,但这似乎是错误的方法。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是我可以想到的没有吸气剂的唯一方法。 每当其他属性更新时,它都会更新valid的值。

var obj = {
  val: 5,
  minimum: 1,
  maximum: 100,
  valid: true,
  set value(v) {
    this.val = v;
    this.updateValid();
  },
  set min(m) {
    this.minimum = m;
    this.updateValid();
  },
  set max(m) {
    this.maximum = m;
    this.updateValid();
  },
  updateValid : function() {
    this.valid = (this.val >= this.minimum && this.val <= this.maximum)
  }
}
obj.value = -1;
console.log(obj);