Skip to content

Instantly share code, notes, and snippets.

@grid23
Last active January 2, 2016 01:19
Show Gist options
  • Select an option

  • Save grid23/8229583 to your computer and use it in GitHub Desktop.

Select an option

Save grid23/8229583 to your computer and use it in GitHub Desktop.
Am I doing it right ? ;-)
(()=>{ "use strict"
let mixinHandler = {
get: (t, n)=>{
if ( t[n] != void 0 )
return t[n]
for ( let i = t.__parents__.length-1; ~i; i-- )
if ( t.__parents__[i][n] != void 0 )
return t.__parents__[i][n]
return Object.prototype[n]
}
, set: (t, n, v) => t[n] = v
}
, proxyfy = parents => Proxy(Object.create(null, { __parents__: { value: parents } }), mixinHandler)
, mixin = this.mixin = (...args)=> typeof args[args.length-1] == "function" ? args.pop().call(null, proxyfy(args)) : proxyfy(args)
})()
mixin({foo:function(){ return this.bar }}, {bar:"foofoo"}, Array.prototype, p=>{
p.foobar = "foobar"
p.push("foo", "bar")
p.sort((a, b)=>a!==b)
console.log(p.foo(), p.foobar, p) // "foofoo", "foobar", { 0: "bar", 1: "foo", foobar: "foobar", length: 2 }
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment