Mixins through class expressions

Jan 12, 2016  

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}