es.reflect.get.js 1.2 KB

123456789101112131415161718192021222324252627
  1. 'use strict';
  2. var $ = require('../internals/export');
  3. var call = require('../internals/function-call');
  4. var isObject = require('../internals/is-object');
  5. var anObject = require('../internals/an-object');
  6. var isDataDescriptor = require('../internals/is-data-descriptor');
  7. var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
  8. var getPrototypeOf = require('../internals/object-get-prototype-of');
  9. var toPropertyKey = require('../internals/to-property-key');
  10. // `Reflect.get` method
  11. // https://tc39.es/ecma262/#sec-reflect.get
  12. var $get = function (target, propertyKey, receiver) {
  13. if (anObject(target) === receiver) return target[propertyKey];
  14. var descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);
  15. if (descriptor) return isDataDescriptor(descriptor)
  16. ? descriptor.value
  17. : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);
  18. var prototype = getPrototypeOf(target);
  19. if (isObject(prototype)) return $get(prototype, propertyKey, receiver);
  20. };
  21. $({ target: 'Reflect', stat: true }, {
  22. get: function get(target, propertyKey /* , receiver */) {
  23. return $get(anObject(target), toPropertyKey(propertyKey), arguments.length < 3 ? target : arguments[2]);
  24. }
  25. });