partialRight.js
 1  var baseRest = require('./_baseRest'),
 2      createWrap = require('./_createWrap'),
 3      getHolder = require('./_getHolder'),
 4      replaceHolders = require('./_replaceHolders');
 5  
 6  /** Used to compose bitmasks for function metadata. */
 7  var WRAP_PARTIAL_RIGHT_FLAG = 64;
 8  
 9  /**
10   * This method is like `_.partial` except that partially applied arguments
11   * are appended to the arguments it receives.
12   *
13   * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
14   * builds, may be used as a placeholder for partially applied arguments.
15   *
16   * **Note:** This method doesn't set the "length" property of partially
17   * applied functions.
18   *
19   * @static
20   * @memberOf _
21   * @since 1.0.0
22   * @category Function
23   * @param {Function} func The function to partially apply arguments to.
24   * @param {...*} [partials] The arguments to be partially applied.
25   * @returns {Function} Returns the new partially applied function.
26   * @example
27   *
28   * function greet(greeting, name) {
29   *   return greeting + ' ' + name;
30   * }
31   *
32   * var greetFred = _.partialRight(greet, 'fred');
33   * greetFred('hi');
34   * // => 'hi fred'
35   *
36   * // Partially applied with placeholders.
37   * var sayHelloTo = _.partialRight(greet, 'hello', _);
38   * sayHelloTo('fred');
39   * // => 'hello fred'
40   */
41  var partialRight = baseRest(function(func, partials) {
42    var holders = replaceHolders(partials, getHolder(partialRight));
43    return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
44  });
45  
46  // Assign default placeholders.
47  partialRight.placeholder = {};
48  
49  module.exports = partialRight;