$.partial.js 769 B

123456789101112131415161718192021222324
  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. , $$ = arguments
  16. , $$len = $$.length
  17. , j = 0, k = 0, args;
  18. if(!holder && !$$len)return invoke(fn, pargs, that);
  19. args = pargs.slice();
  20. if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++];
  21. while($$len > k)args.push($$[k++]);
  22. return invoke(fn, args, that);
  23. };
  24. };