(createComponent)javascript
// plain options object: turn it into a constructor if (isObject(Ctor)) { Ctor = baseCtor.extend(Ctor) }vue
Vue.options._base =Vuejava
组件的Patch(同步数据驱动部分)=》_initnode
if (vm.$options.el) { vm.$mount(vm.$options.el) }
因为组件初始化的时候是不传 el 的,所以组件是⾃⼰接管了 $mount 的过程函数
2.在生成实例过程当中对Vm._vnode和Vm,_$Vnode(父)的父子关系判断处理,进行深度遍历处理。组件化
、最后执⾏、insert(parentElm, vnode.elm, refElm)、完成组件 的 DOM、插⼊,若是组件 patch、过程当中⼜建立了⼦组件,那么DOM 的插⼊顺序是先⼦后⽗。this
_init 中component
Where:src/core/instance/init.js对象
initState 的做⽤ 是初始化 props 、 data 、 methods 、 watch 、 computed 等属性,blog
this._init(options)
vm.$options = mergeOptions
将parent和child合并成新对象返回
走vue.extend
最后通过initInternalComponent只是作了简单⼀层对象赋值,并不涉及到递归、合并策略等复 杂逻辑。
---
4.合并配置,在我看了仍是核心的进行遍历合并处理,能够多关注merge的过程 后记 1.这算是第二篇,发现了一个问题。XMind转MD确实方便,但貌似做为一个博客,是否是须要添加具体的VUE源码里的代码片断,更有利于阅读。也确实让人便于理解。可是这暂时不在计划内, 首先没那么多精力,其次,这个本就偏我的向,不是讲解类的,若是那天,有精力了,再说吧, 2.接下来应该会更新 我以为最关键的响应式的部分了,也是贼耗费经历的部分。