24 lines
769 B
JavaScript
24 lines
769 B
JavaScript
|
'use strict';
|
||
|
var path = require('./$.path')
|
||
|
, invoke = require('./$.invoke')
|
||
|
, aFunction = require('./$.a-function');
|
||
|
module.exports = function(/* ...pargs */){
|
||
|
var fn = aFunction(this)
|
||
|
, length = arguments.length
|
||
|
, pargs = Array(length)
|
||
|
, i = 0
|
||
|
, _ = path._
|
||
|
, holder = false;
|
||
|
while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
|
||
|
return function(/* ...args */){
|
||
|
var that = this
|
||
|
, $$ = arguments
|
||
|
, $$len = $$.length
|
||
|
, j = 0, k = 0, args;
|
||
|
if(!holder && !$$len)return invoke(fn, pargs, that);
|
||
|
args = pargs.slice();
|
||
|
if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++];
|
||
|
while($$len > k)args.push($$[k++]);
|
||
|
return invoke(fn, args, that);
|
||
|
};
|
||
|
};
|