前端/移动开发面试题更新 2026-08-05

在 Vue 中,当组件同时使用 mixin 和 extends 时,它们各自的合并策略是怎样的?请说明覆盖逻辑。

前端/移动开发技术原理方案权衡Vue

考察说明

考查对 Vue 选项合并机制的理解,以及 mixin 与 extends 的优先级。

回答思路

  1. 【回答框架 1】Vue 的选项合并发生在组件初始化时,通过 mergeOptions 方法处理。默认策略是组件自身选项优先于 mixin 和 extends,生命周期钩子则合并为数组依次调用。
  2. 【回答框架 2】mixin 和 extends 都用于复用选项,但 extends 的优先级高于 mixin。当存在多个 mixin 时,数组后面的 mixin 优先级更高,而 extends 在 mixin 之前处理,因此其选项会被组件和后续 mixin 覆盖。
  3. 【回答框架 3】对于 data 对象,采用递归合并,组件实例的数据覆盖 mixin/extend 中的数据,且是深合并。对于 methods、computed 等,组件属性覆盖混入属性;对于生命周期钩子,所有钩子都会被保留,按顺序执行,执行顺序为:extend 的钩子、mixin 的钩子、组件自身的钩子。
  4. 【回答框架 4】自定义选项默认采用覆盖策略,即组件选项覆盖混入选项,除非通过 Vue.config.optionMergeStrategies 自定义合并策略。
  5. 【关键点 1】extends 优先级高于 mixin,组件自身最高。
  6. 【关键点 2】data 进行深合并,组件数据覆盖混入数据。
  7. 【关键点 3】生命周期钩子合并为数组,顺序执行,extend 最先,组件最后。
  8. 【易错点 1】不要混淆 extend 的优先级和覆盖逻辑,extends 只是提高优先级,并不影响 data 的深合并。
  9. 【易错点 2】注意多个 mixin 的合并顺序,数组后面的优先级更高,容易在项目维护时忽略。
  10. 【易错点 3】生命周期钩子的执行顺序并不代表覆盖,容易误以为后定义的钩子不会执行。