更新对象之间的共享属性

时间:2020-03-29 19:08:18

标签: javascript

我有两个共享foo属性的对象。

let obj = {
  // ...
  foo: "ba",
  // ...
};
let obj2 = {
  // ...
  foo: obj.foo,
  // ...
}

有没有一种方法可以通过更新obj.fooobj2.foo来使另一个具有与更新后的值相同的值?例如

obj.foo += "r"
console.log(obj2.foo); // "bar"

2 个答案:

答案 0 :(得分:2)

您可以将字符串存储在其自己的对象中,例如一个元素数组。

let obj = {
  // ...
  foo: ["ba"],
  // ...
};
let obj2 = {
  // ...
  foo: obj.foo,
  // ...
}

obj.foo[0] += "r"
console.log(obj2.foo[0]); // "bar"

答案 1 :(得分:1)

您可以将gettersetter与位于同一范围内的局部变量一起使用。

objectWillChange

或者您可以将getter和setter保留在第二个对象中,并在setter中更新第一个对象的属性。

let foo = 'ba'

let obj = {
  // ...
  get foo() {
    return foo;
  },
  set foo(v) {
    foo = v;
  },
  // ...
};
let obj2 = {
  // ...
  get foo() {
    return foo;
  },
  set foo(v) {
    foo = v;
  },
  // ...
}

console.log(obj.foo, obj2.foo)
obj.foo += 'a'
console.log(obj.foo, obj2.foo)
obj2.foo = 'foobar'
console.log(obj.foo, obj2.foo)