(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.接下來應該會更新 我以爲最關鍵的響應式的部分了,也是賊耗費經歷的部分。