blob: b3ab02b311e7d6d3ccfa4975785e848602c12531 [file] [log] [blame]
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
})
}
})
}