var mix = (object) => ({ with: (...mixins) => mixins.reduce( (c, mixin) => Object.create( c, Object.getOwnPropertyDescriptors(mixin) ), object ) }); var a = {a: 'a'}, b = {b: 'b'}, c = {c: 'c'}; console.log(mix(c).with(a, b));