Skip to content

Instantly share code, notes, and snippets.

@octaharon
Created June 5, 2018 08:01
Show Gist options
  • Save octaharon/7b5f47998db5a98f8b4d0e2f26e92ae9 to your computer and use it in GitHub Desktop.
Save octaharon/7b5f47998db5a98f8b4d0e2f26e92ae9 to your computer and use it in GitHub Desktop.
Multiple inheritance ES6
export class multiClass {
// 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++]);
multiClass.copy(this, obj);
}
}
}
// Copy over properties and methods
for (let base of _bases) {
multiClass.copy(classes, base);
multiClass.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);
}
}
}
}
@GuruRAM
Copy link

GuruRAM commented Jun 5, 2018

The number of arguments should match the number of classes, for parameter-less constructors fake value should be provided.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment