class Mixin {
// Inherit method to create base classes.
static inherit(..._bases) {
class classes {
// The base classes
get base() {
return _bases;
}
constructor(..._args) {
var index = 0;
for (let b of this.base) {
let obj = new b(_args[index++]);
Mixin._copy(this, obj);
}
}
}
// Copy over properties and methods
for (let base of _bases) {
Mixin._copy(classes, base);
Mixin._copy(classes.prototype, base.prototype);
}
return classes;
}
// Copies the properties from one class to another
static _copy(_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);
}
}
}
}
// let mixin = new Mixin();
class A {
aaa() {
console.error(123);
}
}
class B {
bbb() {
console.error(456);
}
}
let All = Mixin.inherit(A, B);
let b = new All();
b.aaa();
b.bbb();
js 多继承
最新推荐文章于 2024-01-29 14:51:01 发布