const barker = (state) => ({
bark: () => console.log(`Whoof, I am ${state.name}`)
})
const driver = (state) => ({
drive: () => {
state.position += state.speed
console.log(`${state.name} drived from position ${state.position - state.speed} to position ${state.position}`)
}
})
const killer = (state) => ({
kill: () => console.log(`${state.name} goes killing!!!`)
})
const murderRobotDog = (name) => {
let state = {
name,
speed: 100,
position: 0
}
return Object.assign(
{
getPosition() {
console.log(`${state.name} is on position ${state.position}`)
}
},
barker(state),
driver(state),
killer(state)
)
}
const penny = murderRobotDog("Penny")
penny.bark()
penny.getPosition()
penny.drive()
penny.getPosition()
penny.kill()