1 min readMay 18, 2018
Hi good people!
Why not using factory functions to achieve the same thing that decorators do?
Look at my code to achieve your same Batman example:
const comicBookCharacter = ( first, last ) => {
const firstName = first
const lastName = last return {
realName: `${firstName} ${lastName}`
}
}const superPower = ( ref ) => {
let powers = [] return {
addPower: ( p ) => {
powers.push( p )
return ref
},
powers
}
}const utilityBelt = ( ref ) => {
let utilities = []
return {
addToBelt: ( p ) => {
utilities.push( p )
return ref
},
utilities
}
}const decorate = ( obj, factoryArray ) => {
const instances = factoryArray.map( f => f( obj ) )
return Object.assign( obj, …instances )
}let batman = comicBookCharacter( ‘Bruce’, ‘Wayne’ )console.log( batman.realName )decorate( batman, [ superPower, utilityBelt ] )batman
.addPower( ‘money’ )
.addToBelt( ‘something’ )
.addPower( ‘strength’)
.addToBelt( ‘batarang’ )console.log( batman.powers, batman.utilities )