Skip to content

Instantly share code, notes, and snippets.

@et4891
Created June 4, 2019 21:01
Show Gist options
  • Save et4891/36f490c8d75c62ef59f3f887502f085e to your computer and use it in GitHub Desktop.
Save et4891/36f490c8d75c62ef59f3f887502f085e to your computer and use it in GitHub Desktop.
// Class for creating multi inheritance.
class multi {
// 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++]);
multi.copy(this, obj);
}
}
}
// Copy over properties and methods
for (let base of _bases) {
multi.copy(classes, base);
multi.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);
}
}
}
}
module.exports = multi;
/**********/
/* Sample */
/**********/
// Single Inherit
class person extends ages
// Multi Inherit
class person extends multi.inherit(ages, genders)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment