pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • 剖析 Vue.js 内部运行机制

    • template 模板是怎样通过 Compile 编译的
    • Vue.js 运行机制全局概览
    • Vuex 状态管理的工作原理
    • 响应式系统的依赖收集追踪原理
    • 响应式系统的基本原理
    • 实现 Virtual DOM 下的一个 VNode 节点
    • 总结 & 常见问题解答
      • 总结
      • 常见问题
      • 最后
    • 批量异步更新策略及 nextTick 原理
    • 数据状态更新时的差异 diff 及 patch 机制
  • 前端性能优化原理与实践

  • Vue

  • JS中的groupBy方法
  • 浏览器滚动条
  • 前端
  • 剖析 Vue.js 内部运行机制
pursuewind
2020-11-23
目录

总结 & 常见问题解答

# 总结 & 常见问题解答

# 总结

在本小册的第一节中,笔者对 Vue.js 内部运行机制做了一个全局的概览,当时通过下面这张图把 Vue.js 拆分成一个一个小模块来介绍,之后通过这一系列小节的学习,相信大家已经对 Vue.js 内部的原理有了一个更进一步的了解,对这张图也再也不会感觉到那么陌生。

每个小节中的代码都是笔者根据 Vue.js 原理单独抽离出来写成的 Demo,大家可以在我的 Gtihub (opens new window) 上查看完整的代码 (见 VueDemo (opens new window) 项目)。

本小册对 Vue.js 原理进行了初步的介绍,希望能够起到一个抛砖引玉的作用,读者读完以后,可以利用这些基础对 Vue.js 进行一个更加深入的探索,相信会有更大的收获。

# 常见问题

  1. 怎么实现 this._test 改变而不是 this._data.test 改变触发更新?

答:其实这中间有一个代理的过程。

_proxy(options.data);

function _proxy (data) {
    const that = this;
    Object.keys(data).forEach(key => {
        Object.defineProperty(that, key, {
            configurable: true,
            enumerable: true,
            get: function proxyGetter () {
                return that._data[key];
            },
            set: function proxySetter (val) {
                that._data[key] = val;
            }
        })
    });
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

本质就是通过 Object.defineProperty 使在访问 this 上的某属性时从 this._data 中读取(写入)。

  1. 能不能将依赖收集中讲到的 dep.addSub(Dep.target) 改成 dep.addSub(new Watcher())呢?

为了便于读者理解这部分内容,我将代码做了简化,实际上一个 Watcher 对象可能会在多个 Dep 中,并不是每次 addSub 都是一个新的 Watcher 对象,需依赖 Dep.target 进行收集(实际上 Dep.target 也是通过 Watcher 对象的 get 方法调用 pushTarget 将自身赋值给 Dep.target)。

# 最后

从 2017 年 12 月开始写这本小册到现在差不多 2 个月的时间,虽说之前写过类似的内容,但是将 Vue.js 源码抽离成一个一个 Demo 还是花了很多时间,对于这本小册也是前前后后改了好几次才让自己满意。

因为读者的基础不一致,而小册的定位是偏向于对新手读者更加友好,所以我尽量用更加浅显易懂的方式去写这本小册的内容。希望大家可以通过这本小册初步掌握 Vue.js 的原理,掌握这些原理以后再去尝试阅读 Vue.js 源码 (opens new window),相信会事半功倍,也会对 Vue.js 有更深一层的理解。

End

Last Updated: 2023/02/14, 18:02:00
实现 Virtual DOM 下的一个 VNode 节点
批量异步更新策略及 nextTick 原理

← 实现 Virtual DOM 下的一个 VNode 节点 批量异步更新策略及 nextTick 原理→

Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜
  • 网络DJ