Initial commit
[yaffs-website] / node_modules / grunt-contrib-watch / node_modules / globule / node_modules / lodash / bind.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 BIND_FLAG = 1,
8     PARTIAL_FLAG = 32;
9
10 /**
11  * Creates a function that invokes `func` with the `this` binding of `thisArg`
12  * and `partials` prepended to the arguments it receives.
13  *
14  * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
15  * may be used as a placeholder for partially applied arguments.
16  *
17  * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
18  * property of bound functions.
19  *
20  * @static
21  * @memberOf _
22  * @since 0.1.0
23  * @category Function
24  * @param {Function} func The function to bind.
25  * @param {*} thisArg The `this` binding of `func`.
26  * @param {...*} [partials] The arguments to be partially applied.
27  * @returns {Function} Returns the new bound function.
28  * @example
29  *
30  * function greet(greeting, punctuation) {
31  *   return greeting + ' ' + this.user + punctuation;
32  * }
33  *
34  * var object = { 'user': 'fred' };
35  *
36  * var bound = _.bind(greet, object, 'hi');
37  * bound('!');
38  * // => 'hi fred!'
39  *
40  * // Bound with placeholders.
41  * var bound = _.bind(greet, object, _, '!');
42  * bound('hi');
43  * // => 'hi fred!'
44  */
45 var bind = baseRest(function(func, thisArg, partials) {
46   var bitmask = BIND_FLAG;
47   if (partials.length) {
48     var holders = replaceHolders(partials, getHolder(bind));
49     bitmask |= PARTIAL_FLAG;
50   }
51   return createWrap(func, bitmask, thisArg, partials, holders);
52 });
53
54 // Assign default placeholders.
55 bind.placeholder = {};
56
57 module.exports = bind;