/**
* 对象操作工具类
* @author cls
* @date 2020-05-29
*/
/**
* showdoc
* @catalog JS工具类/ObjectUtil
* @title 接口混入
* @description Js对象实现多接口混入
* @method static
* @url import { mix } from '@birt/funclib/ObjectUtil.js'
*/
export function mix(...mixins) {
class Mix {
constructor() {
for (let mixin of mixins) {
copyProperties(this, new mixin()); // 拷贝实例属性
}
}
}
for (let mixin of mixins) {
copyProperties(Mix, mixin); // 拷贝静态属性
copyProperties(Mix.prototype, mixin.prototype); // 拷贝原型属性
}
return Mix;
}
function copyProperties(target, source) {
for (let key of Reflect.ownKeys(source)) {
if (key !== 'constructor'
&& key !== 'prototype'
&& key !== 'name'
) {
let desc = Object.getOwnPropertyDescriptor(source, key);
Object.defineProperty(target, key, desc);
}
}
}