isNative.js 663 B

1234567891011121314151617181920212223
  1. var isObj = require('./isObj');
  2. var isFn = require('./isFn');
  3. var toSrc = require('./toSrc');
  4. exports = function(val) {
  5. if (!isObj(val)) return false;
  6. if (isFn(val)) return regIsNative.test(toSrc(val));
  7. return regIsHostCtor.test(toSrc(val));
  8. };
  9. var hasOwnProperty = Object.prototype.hasOwnProperty;
  10. var regIsNative = new RegExp(
  11. '^' +
  12. toSrc(hasOwnProperty)
  13. .replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
  14. .replace(
  15. /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,
  16. '$1.*?'
  17. ) +
  18. '$'
  19. );
  20. var regIsHostCtor = /^\[object .+?Constructor\]$/;
  21. module.exports = exports;