| /** |
| * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/> |
| * Build: `lodash modularize exports="node" -o ./compat/` |
| * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> |
| * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> |
| * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
| * Available under MIT license <http://lodash.com/license> |
| */ |
| var createWrapper = require('../internals/createWrapper'), |
| slice = require('../internals/slice'); |
| |
| /** |
| * Creates a function that, when called, invokes the method at `object[key]` |
| * and prepends any additional `bindKey` arguments to those provided to the bound |
| * function. This method differs from `_.bind` by allowing bound functions to |
| * reference methods that will be redefined or don't yet exist. |
| * See http://michaux.ca/articles/lazy-function-definition-pattern. |
| * |
| * @static |
| * @memberOf _ |
| * @category Functions |
| * @param {Object} object The object the method belongs to. |
| * @param {string} key The key of the method. |
| * @param {...*} [arg] Arguments to be partially applied. |
| * @returns {Function} Returns the new bound function. |
| * @example |
| * |
| * var object = { |
| * 'name': 'fred', |
| * 'greet': function(greeting) { |
| * return greeting + ' ' + this.name; |
| * } |
| * }; |
| * |
| * var func = _.bindKey(object, 'greet', 'hi'); |
| * func(); |
| * // => 'hi fred' |
| * |
| * object.greet = function(greeting) { |
| * return greeting + 'ya ' + this.name + '!'; |
| * }; |
| * |
| * func(); |
| * // => 'hiya fred!' |
| */ |
| function bindKey(object, key) { |
| return arguments.length > 2 |
| ? createWrapper(key, 19, slice(arguments, 2), null, object) |
| : createWrapper(key, 3, null, null, object); |
| } |
| |
| module.exports = bindKey; |