Mixins
class Animal {
constructor(name) {
this.name = name
}
speak = () => console.log(this.name, 'speaks...');
}
const Flying = (Base) => class extends Base {
fly = () => console.log(this.name, 'Flying...');
}
const Swimming = (Base) => class extends Base {
swim = () => console.log(this.name, 'Swimming...');
}
const animal = new (Swimming(Flying(Animal)))("duck");
animal.speak()
animal.fly()
animal.swim()
/*
duck speaks...
duck Flying...
duck Swimming...
*/