| var createCtor = require('./_createCtor'), |
| root = require('./_root'); |
| |
| /** Used to compose bitmasks for function metadata. */ |
| var WRAP_BIND_FLAG = 1; |
| |
| /** |
| * Creates a function that wraps `func` to invoke it with the optional `this` |
| * binding of `thisArg`. |
| * |
| * @private |
| * @param {Function} func The function to wrap. |
| * @param {number} bitmask The bitmask flags. See `createWrap` for more details. |
| * @param {*} [thisArg] The `this` binding of `func`. |
| * @returns {Function} Returns the new wrapped function. |
| */ |
| function createBind(func, bitmask, thisArg) { |
| var isBind = bitmask & WRAP_BIND_FLAG, |
| Ctor = createCtor(func); |
| |
| function wrapper() { |
| var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; |
| return fn.apply(isBind ? thisArg : this, arguments); |
| } |
| return wrapper; |
| } |
| |
| module.exports = createBind; |