12345678910111213141516171819202122232425 |
- var underscore = require('./underscore.js');
- var _executeBound = require('./_executeBound.js');
- var restArguments = require('./restArguments.js');
-
- // Partially apply a function by creating a version that has had some of its
- // arguments pre-filled, without changing its dynamic `this` context. `_` acts
- // as a placeholder by default, allowing any combination of arguments to be
- // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
- var partial = restArguments(function(func, boundArgs) {
- var placeholder = partial.placeholder;
- var bound = function() {
- var position = 0, length = boundArgs.length;
- var args = Array(length);
- for (var i = 0; i < length; i++) {
- args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
- }
- while (position < arguments.length) args.push(arguments[position++]);
- return _executeBound(func, bound, this, this, args);
- };
- return bound;
- });
-
- partial.placeholder = underscore;
-
- module.exports = partial;
|