Mixins

Class User extends Person {
  // ...
}

Object.assign(User.prototype, sayHiMixin);
Let sayMixin = {
  say(phrase) {
    alert(phrase);
  }
};

let sayHiMixin = {
  __proto__: sayMixin, // (or we could use Object.create to set the prototype here)

  sayHi() {
    // call parent method
    super.say(`Hello ${this.name}`);
  },
  sayBye() {
    super.say(`Bye ${this.name}`);
  }
};

class User {
  constructor(name) {
    this.name = name;
  }
}

// copy the methods
Object.assign(User.prototype, sayHiMixin);

// now User can say hi
new User("Dude").sayHi(); // Hello Dude!

Is a class that contains methods for use by other classes without having to be the parent class of those other classes.

Mixins may become a point of conflict if they occasionally overwrite native class methods.

Related concepts

Mixins

Mixins — Structure map

Clickable & Draggable!

Mixins — Related pages: