将当前实例添加到父实例的
$children
属性里,并设置当前实例的$parent
指向父实例”
初始化一些生命周期必须的参数 ```javascript export function initLifecycle (vm: Component) { const options = vm.$options
// * 找到最近的非抽象父组件实例,并将自身 push 到该父组件的 $children 中 // 定义 parent,它引用当前实例的父组件(当前组件的作用域范围的顶部组件) let parent = options.parent // 如果当前实例有父组件,且当前实例不是抽象的(抽象组件是指类似 keep-alive 这种逻辑组件) if (parent && !options.abstract) { // 使用 while 循环查找第一个非抽象的父组件 while (parent.$options.abstract && parent.$parent) { parent = parent.$parent }
// 经过上面的 while 循环后,parent 应该是一个非抽象的组件,将它作为当前实例的父级,所以将当前实例 vm 添加到父级的 $children 属性里
parent.$children.push(vm)
}
vm.$parent = parent // 设置 $root 属性,有父级就是用父级的 $root,否则 $root 指向自身 vm.$root = parent ? parent.$root : vm
vm.$children = [] vm.$refs = {}
vm._watcher = null // 存储对当前实例进行渲染观测的 Watcher vm._inactive = null vm._directInactive = false vm._isMounted = false vm._isDestroyed = false vm._isBeingDestroyed = false } ```