实现 proxy:让修改 a 的属性时同步更新 b

这是「对象代理 / 观察」的一道经典题:希望对 a 设置某个属性时,该属性会同步写入 b。

function proxy(a, b) {
  //TODO
}
var Animal = {};
var Cat = {
  name: 'Hoe'
};
proxy(Animal, Cat);
Animal.name = 'Tom';
console.log(Cat.name); //Tom
function proxy(a, b) {
  //TODO
  Object.defineProperty(a, "name", {
      set (newValue) {
          b.name = newValue;
      }
  })
}
var Animal = {};
var Cat = {
  name: 'Hoe'
};
proxy(Animal, Cat);
Animal.name = 'Tom';
console.log(Cat.name); //Tom

解答

补充:用 Object.defineProperty 在 a 上拦截 name 的赋值操作,把值同步写入 b。