DEV Community

Discussion on: TypeScript?.. or JavaScript?

Collapse
 
adriansamuel profile image
Adrian Samuel

Exactly what the doctor ordered! I love it, I feel this avoids the pitfalls and complexities of class-based inheritance

Thread Thread
 
f1lt3r profile image
F1LT3R • Edited

Here you go Adrian-Samuel, this is how to extend the counter with mixins, without having to update the original object...

const Counter = (count = 0) => ({
  add: () => (count += 1),
  get count() {
    return count;
  }
});

let counter = Counter(0);
counter.add();
counter.count;
console.log(counter.count); // 1

const subtract = () => ({
  subtract() {
    this.count -= 1;
  }
});

const multiply = () => ({
  multiply(amount) {
    this.count *= amount;
  }
});

const extend = (base, ...mixins) =>
  Object.assign(
    {
      ...base
    },
    ...mixins.map(method => method())
  );

counter = extend(counter, subtract, multiply);
counter.subtract();
counter.subtract();
console.log(counter.count); // -1
counter.multiply(2);
console.log(counter.count); // -2
Thread Thread
 
adriansamuel profile image
Adrian Samuel

This is superb! Alistair, really appreciate you taking the time and effort to demonstrate these very useful examples to me!