【Vue2与vue3实现数据代理的原理】

 <script>
      let data = {
        name: "张三",
        age: 18,
      };
      //使用Object.defineProperty(或window.reflect.defineProperty)使对象data与data对象形成映射关系,实现数据代理
      //#region
      //     let p={}//p=data也可以
      //    Object.keys(data).forEach(function(key){
      //         Object.defineProperty(p,key,{
      //             enumerable:true,
      //             configurable:true,
      //             get:function(){
      //                 console.log("有人访问了data对象的name属性")
      //                 return data[key];
      //             },
      //             set:function(value){
      //                 console.log("有人修改了data对象的name属性")
      //                 data.key=value
      //             }
      //         })
      //    })
      //#endregion
      //使用window.proxy对象和window.reflect对象使对象p与data对象形成映射关系,实现数据代理
      const p = new Proxy(data, {
        get: function (target, propName) {
          console.log(`有人访问了${target}的${propName}属性`);
          return Reflect.get(target,propName)
        },
        set: function (target, propName, value) {
          console.log(`有人修改或增加了了${target}的${propName}属性`);
          Reflect.set(target, propName, value)
        },
        deleteProperty: function (target, propName) {
          console.log(`有人删除了${target}的${propName}属性`);
          return Reflect.deleteProperty(target, propName)
        },
      });
    </script>


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值