如何将对象项的右值设置为等于变量而不仅仅是值?

How to set the rvalue of an object item equal to a variable and not just a value?

下面按预期打印 3。

let bar = 3
let obj = { foo: bar }
console.log(obj.foo);

但是,如果我更改 bar 的值,obj.foo 的值不会改变。另外,如果我更改 obj.foo 的值,bar 的值不会改变。

这告诉我,当创建对象时,它并没有真正使用 bar 作为右值,而是使用它的值作为值。如何以不同方式定义 obj 以使两个值始终匹配?

使用 getter 和 setter

let bar = 3;
let obj = { 
    get foo() { return bar },
    set foo(newValue) { bar = newValue }
};
console.log(obj.foo); // will show current value of 'bar'
obj.foo = 7 // will change 'bar' to 7

有关 getters and setters

的更多信息,请参阅 MDN