_partial.js 757 B

1234567891011121314151617181920212223
  1. 'use strict';
  2. var path = require('./_path')
  3. , invoke = require('./_invoke')
  4. , aFunction = require('./_a-function');
  5. module.exports = function(/* ...pargs */){
  6. var fn = aFunction(this)
  7. , length = arguments.length
  8. , pargs = Array(length)
  9. , i = 0
  10. , _ = path._
  11. , holder = false;
  12. while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
  13. return function(/* ...args */){
  14. var that = this
  15. , aLen = arguments.length
  16. , j = 0, k = 0, args;
  17. if(!holder && !aLen)return invoke(fn, pargs, that);
  18. args = pargs.slice();
  19. if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];
  20. while(aLen > k)args.push(arguments[k++]);
  21. return invoke(fn, args, that);
  22. };
  23. };