00001 var apply = require('./_apply'), 00002 createCtor = require('./_createCtor'), 00003 root = require('./_root'); 00004 00006 var WRAP_BIND_FLAG = 1; 00007 00020 function createPartial(func, bitmask, thisArg, partials) { 00021 var isBind = bitmask & WRAP_BIND_FLAG, 00022 Ctor = createCtor(func); 00023 00024 function wrapper() { 00025 var argsIndex = -1, 00026 argsLength = arguments.length, 00027 leftIndex = -1, 00028 leftLength = partials.length, 00029 args = Array(leftLength + argsLength), 00030 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 00031 00032 while (++leftIndex < leftLength) { 00033 args[leftIndex] = partials[leftIndex]; 00034 } 00035 while (argsLength--) { 00036 args[leftIndex++] = arguments[++argsIndex]; 00037 } 00038 return apply(fn, isBind ? thisArg : this, args); 00039 } 00040 return wrapper; 00041 } 00042 00043 module.exports = createPartial;