Vue.prototype._init = function (options?: Object) { // a flag to avoid this being observed vm._isVue = true // merge options if (options && options._isComponent) { // optimize internal component instantiation // since dynamic options merging is pretty slow, and none of the // internal component options needs special treatment. initInternalComponent(vm, options) } else { vm.$options = mergeOptions( resolveConstructorOptions(vm.constructor), options || {}, vm ) } /* istanbul ignore else */ if (process.env.NODE_ENV !== 'production') { initProxy(vm) } else { vm._renderProxy = vm } // expose real self vm._self = vm initLifecycle(vm) initEvents(vm) initRender(vm) callHook(vm, 'beforeCreate') initInjections(vm) // resolve injections before data/props initState(vm) initProvide(vm) // resolve provide after data/props callHook(vm, 'created') if (vm.$options.el) { vm.$mount(vm.$options.el) } }
- initProxy,作用域代理,拦截组件内访问其它组件的数据。
- initLifecycle建立父子组件关系,在当前实例上添加一些属性和生命周期标识。如:$children 、$refs 、 _isMounted 等。
- initEvents 用来存放除 @hook:生命周期钩子名称=”绑定的函数”事件的对象。如:$on 、$emit 等。
- initRender 用于初始化$slots 、$attrs 、$listeners
- initInjections初始化 inject ,一般用于更深层次的组件通信,相当于加强版子组件的 props 。用于组件库开发较多。
- initState 是很多选项初始化的汇总,包括: props 、methods 、data 、computed 和 watch 等。
- initProvide 初始化 provide
- vm.$mount挂载实例。
