请教大家个 Object.defineProperty() 的问题


let obj = {  
  a: 111  
}  
  
// 递归给对象的属性劫持set方法  
function watch(obj, fn) {  
  
  Object.keys(obj).forEach(key => {  
  
    Object.defineProperty(obj, key, {  
        enumerable: true,  
        configurable: true,  
        set(newVal) {  
            fn(key, newVal)  
        }  
    })  
      
  })  
  
}  
  
// 使用  
watch(obj, (prop, newVal) => console.log(prop, newVal))  
  
obj.a = 777 
console.log(obj)

360截图20191217185521170.png

阅读 2.5k
2 个回答

你没有设置get

function watch(obj, fn) {  
  Object.keys(obj).forEach(key => {  
      var value = obj[key];
    Object.defineProperty(obj, key, {  
        enumerable: true,  
        configurable: true,  
        get() {
            return value;
        },
        set(newVal) {  
            fn(key, newVal)  
        }  
    })  
      
  })  
  
}  

image.png
你不知道js-上卷

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题