vue数据响应底层分析

vue双向数据绑定的原理主要通过数据劫持Object.defineProperty和发布订阅模式实现的,通过Object.defineProperty监听数据发生变化然后通知订阅者(watcher),订阅者触发响应的回调。

// 这是vue2.0的底层原理  es5的方法
      // Object.defineProperty这个方法可以对对象中的某一个数据进行监视
      // 如果想对整个对象都进行监听,对这个对象进行递归循环监视
      Object.defineProperty(data,'val',{
        get() {
          console.log('读val了')
        },
        set() {
          console.log('设置val了')
        }
      })
      // es5 object.defineProperty结合递归循环劫持整个对象
      observe(data)
      function defineReactive(data,key,val) {
        observe(val)
        Object.defineProperty(data,key,{
          get() {
            console.log('读data了')
            return val
          },
          set() {
            console.log('写data了')
          }
        })
      }
      function observe(data) {
        if(typeof data !== 'object') return
        for(key in data){
          defineReactive(data,key,data[key])
        }
      }
      // es6 出了一个新的方法 Proxy,因为有了这个东西,vue3.0底层采用的就是Proxy
      const newData = new Proxy(data,{
        get(){
          console.log('读数据了')
        },
        set(){
          console.log('写数据了')
        }
      })

总结而言:

vue数据响应式2.0主要通过Object.defineProperty数据劫持和发布订阅模式实现的,当然了,这是2.0,3.0马上也要发布了,因为es6有Proxy代理对象,所以vue3.0的数据劫持也全面采用Proxy方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值