Vue.js 是一个以数据驱动为设计原理的框架。
所谓数据驱动,是指视图是由数据驱动生成的,比起视图如何生成,开发者更关注数据模型和数据流转。
接下来,我们会从源码角度来分析 Vue 是如何实现的,分析过程会以主线代码为主,重要的分支逻辑会放在之后单独分析。
先来看一个熟悉的 demo
熟悉的 demo
大家对这简单的案例应该都不会陌生,在我还是萌新的那会常看这个demo
demo的代码很简单,功能是点击数字然后累增
1 |
|
现在回想起来,这一切似乎就从这个 new Vue()
开始了:)
带着些许怀旧的心情,我们从 new vue()
开始一探究竟。
new Vue() 做了什么
new Vue() 本质上是创建了一个 Vue 的实例对象,那么 Vue 是怎么定义的呢
Vue 的定义
Vue本质是一个构造函数,只能通过 new 操作符去创建一个 Vue 的实例
1 | const app = new Vue({ /* options */ }); |
1 | // src/core/instance/index.js |
Vue 本身很简单,就只做了一件事,就是调用初始化方法 this._init
,并发参数传入
Vue 实例的函数并没直接写在 Vue 构造函数内,而是通过各种 mixin 挂载到了 Vue.prototype
其实这些函数都可以直接在当前文件中书写,但是拆开到不同模块分别挂载可以降低当前文件的耦合度,更利于代码的维护
initMixin 初始化
initMixin
用于挂载初始化相关的函数到 Vue.prototype
_init
函数则是通过 initMixin
注入到 Vue 的原型链上