object.defineProperty无法监听对象

HaoAlone
  • 0
新手上路,请多包涵

测试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
回复
阅读 578
2 个回答
obj.data.name = 123333;
// 执行顺序上实际是
let data = obj.data; // 这步已经触发 getter 了
data.name = 123333;

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

宣传栏