I’ve just came across Justin’s Fagnani blog post.
The basic idea is simple. Use class
as an expression which returns a new class
while also using an expression for the extends
clause:
1let Mixin = (base) => class extends base {
2 hello () {
3 console.log ('Mixin saying hello...');
4 }
5};
6
7class BaseClass { /* ... */ }
8
9class ClassWithMixin extends Mixin (BaseClass) { /* ... */ }
I’ve been using this pattern in Electrum to extend a component by creating an (anonymous) class which extends the provided input class:
1export default function extendComponent (component /* ... */) {
2 /* ... */
3 return class extends component {
4 constructor (props) {
5 super (props);
6 /* ... */;
7 }
8 }
9}