| /** |
| * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/> |
| * Build: `lodash modularize underscore exports="node" -o ./underscore/` |
| * 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 bind = require('../functions/bind'), |
| identity = require('../utilities/identity'); |
| |
| /** |
| * The base implementation of `_.createCallback` without support for creating |
| * "_.pluck" or "_.where" style callbacks. |
| * |
| * @private |
| * @param {*} [func=identity] The value to convert to a callback. |
| * @param {*} [thisArg] The `this` binding of the created callback. |
| * @param {number} [argCount] The number of arguments the callback accepts. |
| * @returns {Function} Returns a callback function. |
| */ |
| function baseCreateCallback(func, thisArg, argCount) { |
| if (typeof func != 'function') { |
| return identity; |
| } |
| // exit early for no `thisArg` or already bound by `Function#bind` |
| if (typeof thisArg == 'undefined' || !('prototype' in func)) { |
| return func; |
| } |
| switch (argCount) { |
| case 1: return function(value) { |
| return func.call(thisArg, value); |
| }; |
| case 2: return function(a, b) { |
| return func.call(thisArg, a, b); |
| }; |
| case 3: return function(value, index, collection) { |
| return func.call(thisArg, value, index, collection); |
| }; |
| case 4: return function(accumulator, value, index, collection) { |
| return func.call(thisArg, accumulator, value, index, collection); |
| }; |
| } |
| return bind(func, thisArg); |
| } |
| |
| module.exports = baseCreateCallback; |