欢迎来到码农权的博客 MaNongGeGe.|

Vue数据响应式底层原理

Vue数据响应式底层原理

数据响应式定义:(当数据变化的时候,会自动运行一些相关函数)

  • 原理就是通过Object.defineProperty() 对属性进行劫持,当访问该属性时我们就收集依赖,当数据发生改变后就派发更新
function observe(obj) {
  for (const key in obj) {
    let internalValue = obj[key];
    let funcs = [];
    Object.defineProperty(obj, key, {
      get: function() {
        // (依赖搜集)记录:是哪个函数在用我
        if( window.__func && !funcs.includes( window.__func )) {
          funcs.push( window.__func )
        }
        return internalValue;
      },
      set: function(val) {
        internalValue = val;
        // 自动调用依赖(某个函数在运行期间用到了这个属性,更准确的说 某个函数在运行期间用到了这个get方法)该属性的值
        // (派发更新)运行:执行在用我的函数
        for(let i = 0; i < funcs.length; i++) {
          funcs[i]();
        }
      }
    })
  }
}

function autorun(fn) {
  window.__func = fn;
  fn();
  window.__func = null;
}

本文作者:HuangBingQuan

本文链接:https://www.cnblogs.com/bingquan1/p/17135755.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   HuangBingQuan  阅读(47)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 不将就 码农权
  2. 2 Bleeding Love 码农权
  3. 3 想你念你 码农权
Bleeding Love - 码农权
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available