Vue源码解析07--core.instance-Vue实例
2019-04-26
前端开发
1. index.js
src/instance/index.js主要做如下几件事
initMixin()混入(mixin)初始化设置,包括:initLifeCycle(vm)initEvents(vm)initRender(vm)callHook(vm, 'beforeCreate')initInjections(vm)initState(vm)initProvide(vm)callHook(vm, 'created')
stateMixin()混入状态eventsMixin()混入事件机制lifecycleMixin()混入生命周期renderMixin()混入渲染器
2. init.js
initMixin(Vue)
initMixin(Vue)混入初始化设置,改造Vue.prototype,赋予_init(options)方法。
需要initInternalComponent(vm, options)和resolveConstructorOptions(Ctor)的辅助。
从该段源码分析,可以得知一个Component在create阶段的执行步骤:
- 设置Component的uid,作为唯一标识
- 非prod环境记录开始点位
vm._isVue = true,防止被纳入observe- 如果是组件,初始化其内部设置;不是组件则执行设置的混入(递归混入上层组件的设置)
- 非prod环境尝试Proxy API
vm._self = vm暴露自身- 初始化操作
- 初始化生命周期、事件机制、Render
- 触发beforeCreate钩子,进入生命周期
- 初始化Injection、状态、Provide
- 触发created钩子,创建完成
- 非prod环境记录结束点位,计算创建时间
- 对组件进行挂载
1 | // 每次自增1,保持每个component有唯一的_uid |
initInternalComponent(vm, options)
initInternalComponent(vm, options)用于初始化组件内部的设置。
1 | function initInternalComponent(vm: Component, options: InternalComponentOptions) { |
resolveConstructorOptions(Ctor)
resolveConstructorOptions(Ctor)用于处理构造器的设置(主要是递归解决继承的设置)。
需要resolveModifiedOptions(Ctor)和dedupe(latest, extended, sealed)的辅助处理
1 | function resolveConstructorOptions(Ctor: Class<Component>) { |