Inheriting from Multiple Sources

A class can only have one parent (extends one class). But what if it needs behavior from multiple sources? Mixins solve this.

What Is a Mixin?

A mixin is a plain object whose methods are copied into a class prototype — not a parent class, just a " toolbox. "

const Serializable = {
  serialize() { return JSON.stringify(this); },
  deserialize(data) { return Object.assign(this, JSON.parse(data)); }
};

const Validatable = {
  validate() {
    return this.name && this.email ? true : false;
  }
};

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

// Mix multiple toolboxes into User
Object.assign(User.prototype, Serializable, Validatable);

const user = new User('Alice', 'alice@example.com');
console.log(user.validate());  // true
console.log(user.serialize()); // '{"name":"Alice","email":"alice@example.com"}'
Tip

Mixins build flexible, composable architectures without creating deep, brittle inheritance hierarchies.

Note

A mixin can itself contain inherited properties from another mixin, creating entire sets of reusable functionality.