object.defineProperty无法监听对象

测试Object.defineProperty
监听对象时,我知道它无法触发set方法,但为什么会触发get方法?百思不得其解
image.png

相关代码

let obj = {
  data:{
    name:123
  }
}
function defineProperty(obj, key, val){
  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get() {
      // 读取方法
      console.log('读取', key, '成功')
      return val
    },
    set(newval) {
      // 赋值监听方法
      if (newval === val) return
      console.log('监听赋值成功', newval)
      val = newval
      // 可以执行渲染操作
    }
  })
}
defineProperty(obj,'data',obj['data'])
obj.data.name = 123333
阅读 2.8k
2 个回答
obj.data.name = 123333;
// 执行顺序上实际是
let data = obj.data; // 这步已经触发 getter 了
data.name = 123333;

Object.defineProperty 无法深度监听, 只有自己深度遍历才行。 或者你可以这样obj.data= xxx 就会触发set了

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