module.exports = bindObj function bindObj (obj, proto, bound) { bound = bound || Object.create(null) if (Array.isArray(bound)) bound = bound.reduce(function (set, k) { set[k] = true return set }, Object.create(null)) // don't try to bind constructors, it's weird bound.constructor = true proto = proto || obj Object.keys(proto).forEach(function (k) { if (typeof obj[k] === 'function' && !bound[k]) { bound[k] = true obj[k] = proto[k].bind(obj) } }) Object.getOwnPropertyNames(proto).forEach(function (k) { if (typeof obj[k] === 'function' && !bound[k]) { bound[k] = true Object.defineProperty(obj, k, { value: obj[k].bind(obj), enumerable: false, configurable: true, writable: true }) } }) }