从0开始学习Vue2源码 (三、new Vue())1

this._init

图一
图一

截取其中部分代码可以看到 beforeCreate之前

初始化了$options及实例上的一些默认属性和默认值

以及最重要initRender函数;

其中,使用defineReactive 将 '$attrs','$listeners'进行处理响应式处理

(官网截图)

inject/provide

注入一个依赖

从 图一 可以看出先

先处理 inject  initInjections

再处理  data/props   initState

最后才是处理 provide  initProvide

这个顺序保证了当有当前实例和父类元素注入属性有冲突时,以当前实例的属性为准的规则

initInjections 中可以看到 

toggleObserving 将 inject上的属性不会进行响应式处理

data/props

initProps

执行defineReactive函数,初始化 props参数,即赋值和数据绑定

initMethods

绑定 方法至this 实例,可以看到如果props和methods存在同名属性,测试环境下会警告,同时methods必须是函数

initData

这里可以看到,如果使用 function 形式的 data ,那么就是 data.bind(this,this)();

在之前设定 $options 时

 如果时对象形式,那么则这个组件创建的所有实例共用一个数据对象

测试环境,通过模板.vue文件,data 如果不是function形式会报错

initComputed  

创建一个观察者,同时将定义的属性通过原生的Object.defineProperty赋值到实例上,故我们获取数据的时候,实际上就是调用 Object.defineProperty的get函数,同时也可以通过set 写入

initWatch

多种使用方式

接下来是 执行 created生命钩子函数

最后执行 mouted 操作

如果存在虚拟dom元素,则会进行$mouted渲染操作

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值