underscore的restArgs - pod4g/tool GitHub Wiki
使用
// a,b,c不是必须的。可用arguments访问
var fn1 = function(a,b,c){
console.log(a);
console.log(b);
console.log(c);
}
var fn2 = restArgs(fn1,1);
/*
打印:
1
[2, 3, 4, 5]
undefined
*/
fn2(1,2,3,4,5);
fn2 = restArgs(fn1,2);
/*
打印:
1
2
[3,4,5]
*/
fn2();
restArgs源码
/**
* [restArgs 把指定索引处之后的参数处理成一个数组]
* @param {[Function]} func [要处理的函数]
* @param {[Number]} startIndex [开始索引]
* @return {[Function]} [返回接收参数的函数]
*/
var restArgs = window.restArgs = function(func, startIndex) {
startIndex = startIndex == null ? func.length - 1 : +startIndex;
return function() {
// 实参的个数 - startIndex
var length = Math.max(arguments.length - startIndex, 0);
// 创建一个length长度的稀疏数组
var rest = Array(length);
// 给稀疏数组填值
for (var index = 0; index < length; index++) {
rest[index] = arguments[index + startIndex];
}
switch (startIndex) {
case 0: return func.call(this, rest);
case 1: return func.call(this, arguments[0], rest);
case 2: return func.call(this, arguments[0], arguments[1], rest);
}
var args = Array(startIndex + 1);
for (index = 0; index < startIndex; index++) {
args[index] = arguments[index];
}
args[startIndex] = rest;
return func.apply(this, args);
};
};