Files
lodash/internal/baseCallback.js
2015-02-12 21:30:09 -08:00

37 lines
1.1 KiB
JavaScript

import baseMatches from './baseMatches';
import baseMatchesProperty from './baseMatchesProperty';
import baseProperty from './baseProperty';
import bindCallback from './bindCallback';
import identity from '../utility/identity';
import isBindable from './isBindable';
/**
* The base implementation of `_.callback` which supports specifying the
* number of arguments to provide to `func`.
*
* @private
* @param {*} [func=_.identity] The value to convert to a callback.
* @param {*} [thisArg] The `this` binding of `func`.
* @param {number} [argCount] The number of arguments to provide to `func`.
* @returns {Function} Returns the callback.
*/
function baseCallback(func, thisArg, argCount) {
var type = typeof func;
if (type == 'function') {
return (typeof thisArg != 'undefined' && isBindable(func))
? bindCallback(func, thisArg, argCount)
: func;
}
if (func == null) {
return identity;
}
if (type == 'object') {
return baseMatches(func);
}
return typeof thisArg == 'undefined'
? baseProperty(func + '')
: baseMatchesProperty(func + '', thisArg);
}
export default baseCallback;