vue. minxi实现原理
Vue.mixin 实现原理
Vue.mixin 是 Vue.js 提供的一个全局混入方法,用于将混入对象合并到所有 Vue 实例的选项中。其核心原理基于选项合并策略。
选项合并策略
Vue 在初始化时会对组件选项进行合并,混入对象的选项会和组件自身的选项按照特定策略合并。合并策略分为以下几种情况:

- 生命周期钩子函数:同名钩子会合并为数组,混入对象的钩子先执行,组件自身的钩子后执行。
- data 对象:递归合并,组件 data 优先级高于混入 data。
- methods、components、directives:同名属性组件优先,覆盖混入对象。
- 其他选项:组件选项直接覆盖混入选项。
源码实现
在 Vue 源码中,mixin 方法通过 mergeOptions 函数实现选项合并:

Vue.mixin = function (mixin: Object) {
this.options = mergeOptions(this.options, mixin)
return this
}
mergeOptions 的核心逻辑如下:
function mergeOptions(parent, child, vm) {
// 标准化选项
normalizeProps(child, vm)
normalizeInject(child, vm)
normalizeDirectives(child)
// 处理不同选项的合并策略
const options = {}
let key
for (key in parent) {
mergeField(key)
}
for (key in child) {
if (!hasOwn(parent, key)) {
mergeField(key)
}
}
function mergeField(key) {
const strat = strats[key] || defaultStrat
options[key] = strat(parent[key], child[key], vm, key)
}
return options
}
混入执行顺序
混入的生命周期钩子执行顺序遵循以下规则:
- 全局混入的钩子最先执行
- 组件混入的钩子次之
- 组件自身的钩子最后执行
注意事项
- 混入对象的钩子会在组件自身钩子之前调用
- 值为对象的选项如
methods等,组件选项会覆盖混入对象 - 同名属性或方法以组件优先
- 混入可能导致命名冲突,应谨慎使用






