Tasks:
- see examples
- implement
extend(obj, ...objects)so keys from objects will be mixed into obj only if it doesn't contain those keys - implement
wrap(obj, ...funcs)so if obj contains func.name it should be wrapped - implement mixin
logable() - implement universal
equilateralmixin for for N sides (see6-class.js) - implement
emitablewithObject.defineProperty(see6-evants.js) - implement mixin for prototypes (not instances)
- implement
extendfor mixins with additionaloverride:Booleanflag
const mix2 = [ { override: true, toString() { return `${this.name} - ${this.city} - ${this.born}`; } }, { override: false, age() { const year = new Date().getFullYear(); const born = new Date(this.born).getFullYear(); return year - born; } } ]; extend(obj1, mix1, mix2);