为什么 JavaScript 属性不自动更新?

Why don't JavaScript properties update automatically?

我有一个带有 属性 的对象,它存储复选框的 checked 属性,如下所示:

var x = {
  isChecked: document.querySelector("input").checked
};


function getX() {
  (x.isChecked ? console.log("checkbox is checked") : console.log("checkbox is not checked"));
}
<input type="checkbox">
<button onclick="getX()">is the checkbox checked?</button>

选中和取消选中复选框时,isChecked 属性 的值不会更新。为什么会这样?

因为 .checked 是布尔值,而不是对象,所以当您说 isChecked: document.querySelector("input").checked 时,您只是将 isChecked 设置为 element.checked 的当前值。使 isChecked 成为一个函数,以便在每次需要时获取实际值。

var x = {
  isChecked: () => document.querySelector("input").checked
};


function getX() {
  (x.isChecked() ? console.log("checkbox is checked") : console.log("checkbox is not checked"));
}
<input type="checkbox">
<button onclick="getX()">is the checkbox checked?</button>

或者,如果您想继续使用 isChecked 而不是 isChecked(),并且您希望能够使用该变量手动设置它,您可以像这样使用 getter 和 setter :

var x = {
  get isChecked() {
    return document.querySelector("input").checked;
  },
  
  set isChecked(checked) {
    return document.querySelector("input").checked = checked;
  }
};


function getX() {
  (x.isChecked ? console.log("checkbox is checked") : console.log("checkbox is not checked"));
}
<input type="checkbox">
<button onclick="getX()">is the checkbox checked?</button>
<button onclick="x.isChecked = false">uncheck</button>
<button onclick="x.isChecked = true">check</button>