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.