Vue3响应式原理与Vue2的对比

// 源数据
      let person = {
          name: '张三',
          age: 18
      }
      //#region
      // 模拟Vue2中实现响应式
      // let p = {}
      // Object.defineProperties(p, 'name', {
      //     configurable: true,
      //     // 有人读取name时调用
      //     get() {
      //         return person.name
      //     },
      //     // 有人修改name时调用
      //     set(value) {
      //         console.log('有人修改了name属性,我发现了,我要去更新界面!');
      //         person.name = value
      //     }
      // })
      // Object.defineProperties(p, 'age', {
      //     configurable: true,
      //     // age
      //     get() {
      //         return person.age
      //     },
      //     // 有人修改name时调用
      //     set(value) {
      //         console.log('有人修改了name属性,我发现了,我要去更新界面!');
      //         person.age = value
      //     }

      // })
  //#endregion
  //模拟Vue3中实现响应式
  // p为person的代理对象
  const p = new Proxy(person,{
      // 有人读取p的某个属性时调用
      get(target,propName){
          console.log('有人读取了p身上的'+propName+'属性');
          return target[propName]
      },
      // 有人修改p的某个属性,或给p追加某个属性时调用
      set(target,propName,value){
          console.log('有人修改了p身上的'+propName+'属性,我要去更新');
          target[propName] = value
      },
      // 有人删除p的某个属性时调用
      deleteProperty(target,propName){
          console.log('有人删除了p身上的'+propName+'属性,我要去更新');
          return delete target[propName]
      }
  })

 

posted @   ajaXJson  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示