vue extend实现原理
Vue.extend 实现原理
Vue.extend 是 Vue 的一个全局 API,用于基于 Vue 构造函数创建一个子类。其核心逻辑位于 src/core/global-api/extend.js 中。
核心流程
-
初始化子类构造函数
const Super = this const SuperId = Super.cid const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}) if (cachedCtors[SuperId]) { return cachedCtors[SuperId] } -
定义子类构造函数
const Sub = function VueComponent (options) { this._init(options) } -
原型继承
Sub.prototype = Object.create(Super.prototype) Sub.prototype.constructor = Sub Sub.cid = cid++ -
合并选项
Sub.options = mergeOptions( Super.options, extendOptions ) -
缓存构造函数

cachedCtors[SuperId] = Sub return Sub
关键点分析
-
原型链继承
- 通过
Object.create建立原型链 - 确保子类能访问父类的原型方法
- 通过
-
选项合并策略
- 使用
mergeOptions合并父类选项和扩展选项 - 处理 components、directives、filters 等特殊选项
- 使用
-
缓存优化

- 避免重复创建相同配置的子类
- 通过 _Ctor 属性实现缓存机制
-
构造函数初始化
- 子类构造函数调用 _init 方法
- 与 Vue 实例初始化流程一致
使用示例
const MyComponent = Vue.extend({
template: '<div>Custom Component</div>'
})
new MyComponent().$mount('#app')
实现特点
-
轻量级继承
- 不涉及 ES6 class 语法
- 基于原型链的经典继承实现
-
选项合并灵活性
- 支持多级继承时的选项合并
- 提供自定义合并策略的可能性
-
与组件系统集成
- 返回的构造函数可直接用于组件注册
- 与 Vue 组件生命周期无缝衔接
这种实现方式保证了 Vue 组件系统的灵活性和扩展性,同时保持了代码的简洁高效。






