Skip to content

Latest commit

 

History

History
48 lines (48 loc) · 3.33 KB

vue-init-course.md

File metadata and controls

48 lines (48 loc) · 3.33 KB

VUE`初始化过程

通过断点查看VUE的初始化执行过程

  1. thisVue$3)赋值给vm
  2. vm实例对象添加一个id,即_uid++
  3. vm添加一个标识属性 _isVue,标识该对象是否应该被observe
  4. 判断是否为组件实例,然后两种options结合方式。
  5. mergeOptions用来合并两个options
  6. 合并前,先对props进行初始化
  7. 合并前,对directives指令进行初始化
  8. 合并前,判断options里面是否有额外的配置参数,即extends的字段是否存在(如果是function则合并其options到目标对象,如何是对象则将其合并到目标对象)
  9. 合并前,判断options里面是否有mixins字段,mixins是数组类型,如果mixinVue$3的实例,则将其options合并到目标对象,否则合并自身到目标对象
  10. options合并,并以options里面的key为优先。
  11. 合并完成后返回并将合并后的options对象赋值给vm的$options属性。
  12. 初始化对象代理函数,即Proxy对象
  13. 判断当前浏览器是否支持Proxy对象,即通过将该函数toString()后判断其是否存在nativecode字段等算法,支持即hasProxy标识字段为true
  14. 如果vm的$options里面包含render属性,即将代理对象处理函数赋值为get方法,否则为has方法
  15. 然后给vm添加方法_renderProxy=new Proxy(vm,handlers),代理vmin方法
  16. 如果不含proxy方法,则直接将本身vm赋值到vm._renderProxy
  17. vm自身赋值给vm._self
  18. 初始化生命周期函数
  19. 首先判断vm.$options是否有parent字段,如果有的话就将vm实例加入到parent的$children字段中,即2565行代码中的 .push(vm)
  20. 如果不存在parent字段,初始化vm.$parent属性为parentundefined
  21. 初始化vm.$root属性,如果parent不存在赋值为自身,否则赋值为parent.$root
  22. 初始化vm.$children属性为数组[]
  23. 初始化vm.$refs属性为空对象{}
  24. 初始化vm._watchernull
  25. 初始化vm._inactive=false
  26. 初始化vm._isMounted = false
  27. 初始化vm._isDestroyed=false
  28. 初始化vm._isBeingDestroyed = false
  29. 生命周期函数初始化完毕
  30. 初始化事件函数
  31. 初始化vm._eventObject.create(null)
  32. 初始化vm._hasHookEventfalse
  33. 初始化父对象中的事件句柄,如果vm.options._parentListeners存在的话
  34. 事件函数初始化完毕
  35. 初始化渲染函数(即render)
  36. 初始化vm.$vnode=null(the placeholder node in parent tree)
  37. 初始化vm._vnode=null(the root of the child tree)
  38. 初始化vm._staticTrees=null
  39. 初始化vm.$slotsoptins中的_renderChildren,不存在的话默认为{}
  40. 初始化vm.$scopedSlots为空对象{}
  41. 初始化vm._cnode节点的生成构建函数即(createElement)(内部使用)
  42. 初始化vm.$createElementnode节点的生成构建函数即(createElement)(外部调用)
  43. 渲染函数初始化完毕
  44. 触发生命周期函数,beforeCreate节点,如果options里面监听了beforeCreate的生命周期方法,即触发该函数,同时如果vm._hasHookEventtrue时,触发vm.$emit方法
  45. 初始化state函数
  46. 初始化vm._watchers=[]