mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-31 15:27:50 +00:00
39 lines
1.0 KiB
JavaScript
39 lines
1.0 KiB
JavaScript
import baseSetData from './baseSetData';
|
|
import isNative from '../lang/isNative';
|
|
import support from '../support';
|
|
|
|
/** Used to detect named functions. */
|
|
var reFuncName = /^\s*function[ \n\r\t]+\w/;
|
|
|
|
/** Used to detect functions containing a `this` reference. */
|
|
var reThis = /\bthis\b/;
|
|
|
|
/** Used to resolve the decompiled source of functions. */
|
|
var fnToString = Function.prototype.toString;
|
|
|
|
/**
|
|
* Checks if `func` is eligible for `this` binding.
|
|
*
|
|
* @private
|
|
* @param {Function} func The function to check.
|
|
* @returns {boolean} Returns `true` if `func` is eligible, else `false`.
|
|
*/
|
|
function isBindable(func) {
|
|
var result = !(support.funcNames ? func.name : support.funcDecomp);
|
|
|
|
if (!result) {
|
|
var source = fnToString.call(func);
|
|
if (!support.funcNames) {
|
|
result = !reFuncName.test(source);
|
|
}
|
|
if (!result) {
|
|
// Check if `func` references the `this` keyword and store the result.
|
|
result = reThis.test(source) || isNative(func);
|
|
baseSetData(func, result);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
export default isBindable;
|