mixin inheritance
replit โฉ mixin inheritance
const { log } = console;
// -------------- Mixin Inheritance --------------
// โญ mixin's base object
const canSaySomething = {
say(phrase) { log(phrase) }
};
// โญ inherits from `canSaySomething`
const canSayHi = {
// -------------------------------------
// โญ prototype chain:
// can use Object.setPrototypeOf() instead.
__proto__: canSaySomething,
// -------------------------------------
// -------------------------------------
// โญ super
// === [[HomeObject]].[[Prototype]]
// === canSayHi.[[Prototype]]
// === canSaySomething
// -------------------------------------
sayHi() { super.say(`Hello ${this.name}!`) },
sayBye() { super.say(`Bye ${this.name}!`) },
};
// User
class User {
constructor(name) {
this.name = name;
}
}
// --------------- mix in --------------------------
// โญ copy all enumerable own members from mixin(s)
// to `User.prototype` (NOT `User`).
//
// โญ โญ๏ธ target โฎ โญsourceโโฎ
Object.assign( User.prototype, canSayHi );
const dude = new User("Dude");
dude.sayHi(); // Hello Dude!
dude.sayBye(); // Bye Dude!
Last updated
Was this helpful?