Composition vs inheritance https://www.youtube.com/watch?v=wfMtDGfHWpA
Animal
.poop()
Dog
// .poop()
.bark()
Cat
// .poop()
.meow()
Robot
.drive()
CleaningRobot
// .drive()
.clean()
MurderRobot
// .drive()
.kill()
// create robot which drive, kill and bark but not poop!
MurderRobotDog
.bark()
// inheritance: dicide what your types are
// composition: decide what your type do
//Composition
dog= pooper + barker
cat= pooper + meower
cleanongRobot= driver+cleaner
murderRobot= driver + killer
murderRobotDog= driver + killer + barker
//Implementation
const barker = (state) => ({
bark: ()=> console.log('woof, I am ' + state.name);
});
const driver = (state) => ({
drive: () => state.position = state.position + state.speed;
});
barker({name: 'karo'}).bark(); // woof, I am karo
const murderRobotDog = (name) => {
let state = {
name,
speed: 100,
position: 0
}
return Object.assign(
{},
barker(state),
driver(state),
killer(state)
)
}
murderRobotDog('sniffles').bark(); // woof, I am sniffles