array-method-uses-to-length.js 894 B

123456789101112131415161718192021222324252627
  1. var DESCRIPTORS = require('../internals/descriptors');
  2. var fails = require('../internals/fails');
  3. var has = require('../internals/has');
  4. var defineProperty = Object.defineProperty;
  5. var cache = {};
  6. var thrower = function (it) { throw it; };
  7. module.exports = function (METHOD_NAME, options) {
  8. if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
  9. if (!options) options = {};
  10. var method = [][METHOD_NAME];
  11. var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
  12. var argument0 = has(options, 0) ? options[0] : thrower;
  13. var argument1 = has(options, 1) ? options[1] : undefined;
  14. return cache[METHOD_NAME] = !!method && !fails(function () {
  15. if (ACCESSORS && !DESCRIPTORS) return true;
  16. var O = { length: -1 };
  17. if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
  18. else O[1] = 1;
  19. method.call(O, argument0, argument1);
  20. });
  21. };