24 lines
663 B
JavaScript
24 lines
663 B
JavaScript
var isObj = require('./isObj');
|
|
var isFn = require('./isFn');
|
|
var toSrc = require('./toSrc');
|
|
exports = function(val) {
|
|
if (!isObj(val)) return false;
|
|
if (isFn(val)) return regIsNative.test(toSrc(val));
|
|
|
|
return regIsHostCtor.test(toSrc(val));
|
|
};
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
var regIsNative = new RegExp(
|
|
'^' +
|
|
toSrc(hasOwnProperty)
|
|
.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
|
|
.replace(
|
|
/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,
|
|
'$1.*?'
|
|
) +
|
|
'$'
|
|
);
|
|
var regIsHostCtor = /^\[object .+?Constructor\]$/;
|
|
|
|
module.exports = exports;
|