stephledev
10/10/2017 - 11:25 AM

Functional mixin

let blueBelt = {
  type: 'belt',
  color: 'blue'
}

let redInserter = {
  type: 'inserter',
  color: 'red'
}

const Runnable = (obj) => {
  const proto = {
    stop() {
      console.log(`${obj.color} ${obj.type} stopped`)
    },
    start() {
      console.log(`${obj.color} ${obj.type} started`)
    }
  }
  return Object.assign(obj, proto)
}

Runnable(blueBelt, 1)
blueBelt.stop() // blue belt stopped
Runnable(redInserter, 2)
redInserter.start() // red inserter started