You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.3 KiB
67 lines
2.3 KiB
/** |
|
* lodash 3.6.1 (Custom Build) <https://lodash.com/> |
|
* Build: `lodash modern modularize exports="npm" -o ./` |
|
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> |
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
* Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
* Available under MIT license <https://lodash.com/license> |
|
*/ |
|
|
|
/** Used as the `TypeError` message for "Functions" methods. */ |
|
var FUNC_ERROR_TEXT = 'Expected a function'; |
|
|
|
/* Native method references for those with the same name as other `lodash` methods. */ |
|
var nativeMax = Math.max; |
|
|
|
/** |
|
* Creates a function that invokes `func` with the `this` binding of the |
|
* created function and arguments from `start` and beyond provided as an array. |
|
* |
|
* **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). |
|
* |
|
* @static |
|
* @memberOf _ |
|
* @category Function |
|
* @param {Function} func The function to apply a rest parameter to. |
|
* @param {number} [start=func.length-1] The start position of the rest parameter. |
|
* @returns {Function} Returns the new function. |
|
* @example |
|
* |
|
* var say = _.restParam(function(what, names) { |
|
* return what + ' ' + _.initial(names).join(', ') + |
|
* (_.size(names) > 1 ? ', & ' : '') + _.last(names); |
|
* }); |
|
* |
|
* say('hello', 'fred', 'barney', 'pebbles'); |
|
* // => 'hello fred, barney, & pebbles' |
|
*/ |
|
function restParam(func, start) { |
|
if (typeof func != 'function') { |
|
throw new TypeError(FUNC_ERROR_TEXT); |
|
} |
|
start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); |
|
return function() { |
|
var args = arguments, |
|
index = -1, |
|
length = nativeMax(args.length - start, 0), |
|
rest = Array(length); |
|
|
|
while (++index < length) { |
|
rest[index] = args[start + index]; |
|
} |
|
switch (start) { |
|
case 0: return func.call(this, rest); |
|
case 1: return func.call(this, args[0], rest); |
|
case 2: return func.call(this, args[0], args[1], rest); |
|
} |
|
var otherArgs = Array(start + 1); |
|
index = -1; |
|
while (++index < start) { |
|
otherArgs[index] = args[index]; |
|
} |
|
otherArgs[start] = rest; |
|
return func.apply(this, otherArgs); |
|
}; |
|
} |
|
|
|
module.exports = restParam;
|
|
|