Object.defineProperty监听的属性无法用<对象.key>的方式修改

192 阅读1分钟

利用Object.defineProperty定义的属性只能用里面的set方法进行修改,不能直接用<对象.属性='xx'>的方法进行修改

let obj = {
    name:'zhangsan',
    age:15
  }

  let temp = {
    job:'student'
  };

  for(let item in obj) {
    Object.defineProperty(temp,item,{
      get() {
        return obj[item];
      }
    })
  }
  
  temp.name = 'lisi';
  temp.job = 'teacher';
  console.log(temp.name); // zhangsan
  console.log(temp.job); // teacher

正确的修改方法为:

  for(let item in obj) {
    Object.defineProperty(temp,item,{
      get() {
        return obj[item];
      },
      set(newValue) {
          obj[item] = newValue;//正确
          temp[item] = newValue;//错误,会一直重复set操作进入死循环
      }
    })
  }