restArgs.js 784 B

123456789101112131415161718192021222324
  1. exports = function(fn, startIdx) {
  2. startIdx = startIdx == null ? fn.length - 1 : +startIdx;
  3. return function() {
  4. var len = Math.max(arguments.length - startIdx, 0);
  5. var rest = new Array(len);
  6. var i;
  7. for (i = 0; i < len; i++) rest[i] = arguments[i + startIdx];
  8. switch (startIdx) {
  9. case 0:
  10. return fn.call(this, rest);
  11. case 1:
  12. return fn.call(this, arguments[0], rest);
  13. case 2:
  14. return fn.call(this, arguments[0], arguments[1], rest);
  15. }
  16. var args = new Array(startIdx + 1);
  17. for (i = 0; i < startIdx; i++) args[i] = arguments[i];
  18. args[startIdx] = rest;
  19. return fn.apply(this, args);
  20. };
  21. };
  22. module.exports = exports;