Proxy 怎么监听到对象中嵌套对象的引用

Proxy监听对象中嵌套对象的引用,在访问或修改嵌套对象时触发相应的代理处理器方法。这种特性通常称为“深度监听”或“懒监听”。

在 Proxy 的陷阱(trap)函数中,当你尝试访问目标对象的某个属性,如果该属性值也是一个对象,你可以选择返回一个新的 Proxy 实例来代理这个嵌套对象,从而实现深度监听。例如,在 get 陷阱中,你可以检查获取的属性是否为对象,如果是,则返回其对应的 Proxy。
示例:

const obj = {
  nestedObj: { foo: 'bar' }
}

const handler = {
  get(target, prop, receiver) {
    const value = Reflect.get(target, prop, receiver)
    if (typeof value === 'object' && value !== null) {
      return new Proxy(value, handler)
    }
    console.log('get', prop, target[prop])
    return value
  },
  set(target, property, value) {
    target[property] = value
    console.log(`Setting property '${property}' to '${value}'`)
    return true
  }
}

const proxyObj = new Proxy(obj, handler)
proxyObj.nestedObj.foo = 'baz' // 输出: Setting property 'foo' to 'baz'

这样一来,对于任何嵌套层次的对象属性访问或修改,只要涉及到的对象都被包装进了 Proxy,就可以全面地监听到对象内部的变化。不过需要注意的是,这样的实现通常不会自动递归地对整个嵌套结构预先进行 Proxy 包装,而是在实际访问或修改时动态创建和返回 Proxy。这就是所谓的“懒监听”。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值