Dart
mixin即mix in,中文翻译过来是“混入”,就是在类中混入其他功能
在Dart官网中的定义是Mixins are a way of reusing code in multiple class hierarchies.翻译过来就是“Mixins是一种在多类层次结构中复用代码的一种方式”
Dart的mixins使用
首先用mixin关键字定义一个mixin类
对于mixin关键字可以这样理解,定义类用class,定义接口用interface,而定义Mixins用的就是mixin A {
void a() {print('A');}
}
然后用with关键字混入一个mixin类
对于with关键字也可以这样理解,集成类用extends,实现接口用implements,而混入Minxins用的就是with
void main() {
Mix m = Mix();
m.a();
}
多混入
Mixins支持多混入,这样就可以使用多个Mixin类的功能
如下的Mix类混入了A、B两个类
mixin A {
void a() {
print('A');
}
}
mixin B {
void b() {
print('B');
}
}
class Mix with A, B {
//混入多个类
}
void main() {
Mix m = Mix();
m.a();
m.b();
}
注意事项
- Mixins除了继承Object外,不可以继承任何其他类
- Mixins不可以定义构造方法
- 方法覆盖,后盖前
vue3的混入
混入 (mixins)定义了一部分可复用的方法或者计算属性。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
const myMixin = {
created() {
this.hello()
},
methods: {
hello() {
console.log('wdada!')
}
}
}
// 定义一个应用,使用混入
const app = Vue.createApp({
mixins: [myMixin]
})
app.mount('#app')
混入合并
当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合。
比如,数据对象在内部会进行浅合并 (一层属性深度),在和组件的数据发生冲突时以组件数据优先。
以下实例中,Vue 实例与混入对象包含了相同的方法。从输出结果可以看出两个选项合并了。
<div id = "app"></div>
<script type = "text/javascript">
const myMixin = {
data() {
return {
message: 'hello',
foo: 'runoob'
}
}
}
const app = Vue.createApp({
mixins: [myMixin],
data() {
return {
message: 'goodbye',
bar: 'def'
}
},
created() {
document.write(JSON.stringify(this.$data))
}
输出结果显示: {"message:goodbaye,"foo": "runoob","bar":"def"}
同名钩子
同名钩子函数将合并为一个数组,因此都将被调用。另外,mixin 对象的钩子将在组件自身钩子之前调用。
const myMixin = {
created() {
console.log('mixin 对象的钩子被调用')
}
}
const app = Vue.createApp({
mixins: [myMixin],
created() {
console.log('组件钩子被调用')
}
})
mixins的钩子函数比组件调用早
结果
这两者区别较大,为了方便,所以记在一起
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。