es6 Proxy的终极方法

本文介绍了JavaScript中的Proxy对象,用于创建一个代理,从而能够拦截并定制对目标对象的访问行为。通过示例展示了如何使用Proxy进行get和set操作的拦截,以及如何实现对复杂对象的深度监听和拦截。此外,还提供了一个`deepProxy`函数,用于递归地对对象进行代理,以实现更全面的属性变更监听。
摘要由CSDN通过智能技术生成

1.什么是proxy

proxy俗称为代理,其原理就是截取目标对象的一些操作,例如 赋值、查看等等。其中最常用的应该是get,set操作了

2.怎么对目标对象进行代理呢

2.1需要对使用Proxy函数对目标对象进行绑定,目标对象可以使数组,也可以是对象,函数

···
var proxy = new Proxy(target, handler);
···

2.2 实际操作

···
// 将{name: ‘测试’}这个对象绑定get拦截,并且实例化为obj对象
const obj = new Proxy({name: ‘测试’}, {
// 拦截对目标对象的查看操作
get(target, propKey){
console.log(‘拦截对象’, target);
console.log(‘操作的属性’, propKey);
}
})
// 查看操作
obj.name;
···
其他的操作都类似

2.4对复杂对象进行监听拦截

···
/**

  • 给对象设置proxy
  • @param obj 需要使用proxy代理的属性
  • @param cb 回调函数,当前元素的触发属性的方法后执行
  • @returns 返回当前对象proxy实例对象
    */
    deepProxy(obj: any, cb) {
<!-- 如果当前目标对象是一个复杂对象是进行深层代理 -->
if (typeof obj === 'object') {
  <!-- 给当前对象的每一个属性进行遍历,代理 -->
  for (const key in obj) {
    if (typeof obj[key] === 'object') {
      <!-- 可以在这排除不想要进行代理的属性或者对象 -->
      if (obj[key].hasOwnProperty('text')) {
        continue;
      }
      obj[key] = this.deepProxy(obj[key], cb);
    }
  }
}
<!-- 返回当前对象的代理 -->
return new Proxy(obj, {
  set(target, key, value, receiver) {
    <!-- 回调函数,对当前类型的操作的一个函数 -->
    cb();
    return Reflect.set(target, key, value, receiver);
  },
  deleteProperty(target, key) {
     <!-- 回调函数,对当前类型的操作的一个函数 -->
    cb();
    return Reflect.deleteProperty(target, key);
  }
});

}
···

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值