mixin 和 extend 都是 Vue.js 中实现组件继承的方式,但两者有很大区别:
mixin:
- 混入(mixin)是一种分发可复用功能的灵活方式。一个组件可以同时使用多个混入对象。
- 混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。
使用方法:
js
var mixin = {
methods: { ... }
}
var Component = {
mixins: [mixin],
// ...
}
示例:
js
var myMixin = {
methods: {
foo() { ... }
}
}
var Component = {
mixins: [myMixin],
created() {
this.foo() // 调用混入的方法
}
}
extend:
- 继承(extend)是模仿 ES6 class 的继承方式实现的原型继承。
- 父类的方法和选项将被“继承”到子类。
使用方法:
js
var Parent = { ... }
var Child = {
extends: Parent,
...
}
示例:
js
var Parent = {
data() {
return { msg: 'parent' }
}
}
var Child = {
extends: Parent,
created() {
console.log(this.msg) // parent
}
}
所以:
mixin 是一种灵活的多继承方式,可以混入多个对象。
extend 是标准的原型继承,只能继承一个对象。
mixin 适用于分发可复用的方法或计算属性,而不互相依赖。
extend 适用于扩展父组件的选项,保持二者之间稳固的继承关系。