48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import isFunction from './isFunction.js';
 | |
| import isMasked from './_isMasked.js';
 | |
| import isObject from './isObject.js';
 | |
| import toSource from './_toSource.js';
 | |
| 
 | |
| /**
 | |
|  * Used to match `RegExp`
 | |
|  * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
 | |
|  */
 | |
| var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
 | |
| 
 | |
| /** Used to detect host constructors (Safari). */
 | |
| var reIsHostCtor = /^\[object .+?Constructor\]$/;
 | |
| 
 | |
| /** Used for built-in method references. */
 | |
| var funcProto = Function.prototype,
 | |
|     objectProto = Object.prototype;
 | |
| 
 | |
| /** Used to resolve the decompiled source of functions. */
 | |
| var funcToString = funcProto.toString;
 | |
| 
 | |
| /** Used to check objects for own properties. */
 | |
| var hasOwnProperty = objectProto.hasOwnProperty;
 | |
| 
 | |
| /** Used to detect if a method is native. */
 | |
| var reIsNative = RegExp('^' +
 | |
|   funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
 | |
|   .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The base implementation of `_.isNative` without bad shim checks.
 | |
|  *
 | |
|  * @private
 | |
|  * @param {*} value The value to check.
 | |
|  * @returns {boolean} Returns `true` if `value` is a native function,
 | |
|  *  else `false`.
 | |
|  */
 | |
| function baseIsNative(value) {
 | |
|   if (!isObject(value) || isMasked(value)) {
 | |
|     return false;
 | |
|   }
 | |
|   var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
 | |
|   return pattern.test(toSource(value));
 | |
| }
 | |
| 
 | |
| export default baseIsNative;
 |