Home Reference Source Repository

src/helper/mixin.js

import 'babel-polyfill';

// Class for creating multi inheritance.
export 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);
            }
        }
    }
}