You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置对象属性的rvalue为变量本身而非值,实现两者值始终同步

实现bar与obj.foo双向同步的方案

基础类型赋值是值拷贝,所以直接写foo: bar只会复制bar当前的数值,两者后续修改互不影响。要实现同步,有两种常见方案:

方案1:使用getter/setter(推荐)

直接在对象上定义foo的存取器,让foo的读取和写入直接操作bar变量,不需要修改原有bar的类型和使用习惯:

let bar = 3
let obj = {
  get foo() {
    return bar
  },
  set foo(value) {
    bar = value
  }
}

// 测试同步效果
console.log(obj.foo) // 输出3
bar = 5
console.log(obj.foo) // 输出5,修改bar自动同步到obj.foo
obj.foo = 10
console.log(bar) // 输出10,修改obj.foo自动同步到bar

注意:该方案依赖作用域访问规则,obj定义的位置必须能正常访问到bar变量才会生效。

方案2:使用引用类型包装值

如果能接受修改bar的定义,也可以把原始值放到引用类型(对象/数组)中,利用引用类型赋值传地址的特性实现同步:

let bar = { value: 3 }
let obj = { foo: bar }

// 测试同步效果
console.log(obj.foo.value) // 输出3
bar.value = 5
console.log(obj.foo.value) // 输出5,修改bar自动同步到obj.foo
obj.foo.value = 10
console.log(bar.value) // 输出10,修改obj.foo自动同步到bar

注意:该方案需要每次读写都通过.value属性操作,不能直接给bar或obj.foo重新赋值,否则会打断引用关系。

内容的提问来源于stack exchange,提问作者JSNinja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:27:05