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