mixin:多重继承,也称为extend
mixin(混合)的本质就是将一个对象的属性拷贝到另一个对象上,其实就是对象的融合。
Q: 这个和原型链的继承有什么区别?
A: mixin是直接在混合后的对象本身的属性上查找的,而不是在prototype上查找的
Q: 这个和Object.assigin()有什么区别?
A: 虽然Object.assigin()也在对象属性进行合并,但Object.assigin()不会复制原型链上的属性,
而mixin会将原型链上的属性一并复制过去(for … in …)
demo:
1 | // mixin.js |
1 | // index.js |
注: mixin.js 扩展参数的写法:1
2
3
4
5
6
7
8
9// mixin.js
export default mixin (...objs) {
return objs.reduce((dest, src) => {
for (var key in src) {
dest[key] = src[key]
}
return dest;
});
};