看Vue如何合并配置
合并选项的代码
// 合并全局的 options 到组件 $options 中
vm.$options = mergeOptions(
resolveConstructorOptions(vm.constructor),
options || {},
vm
)
这里有两个方法 resolveConstructorOptions
和mergeOptions
先看第一个
export function resolveConstructorOptions (Ctor: Class<Component>) {
let options = Ctor.options
if (Ctor.super) {
// 这里递归的去取出所有父类的options, 并合并到当前
const superOptions = resolveConstructorOptions(Ctor.super)
const cachedSuperOptions = Ctor.superOptions
// 如果存在缓存,则直接返回
if (superOptions !== cachedSuperOptions) {
// 如果父类的选项发生变化,需要重新合并父类options
Ctor.superOptions = superOptions
// 检查是否有任何后期修改/附加的选项 (#4976)
const modifiedOptions = resolveModifiedOptions(Ctor)
// 更新配置
if (modifiedOptions) {
extend(Ctor.extendOptions, modifiedOptions)
}
// 将父类上的options都合并到当前option