var $ = require('../internals/export');
+var call = require('../internals/function-call');
var isObject = require('../internals/is-object');
var anObject = require('../internals/an-object');
-var has = require('../internals/has');
+var isDataDescriptor = require('../internals/is-data-descriptor');
var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
var getPrototypeOf = require('../internals/object-get-prototype-of');
var receiver = arguments.length < 3 ? target : arguments[2];
var descriptor, prototype;
if (anObject(target) === receiver) return target[propertyKey];
- if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has(descriptor, 'value')
+ descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);
+ if (descriptor) return isDataDescriptor(descriptor)
? descriptor.value
- : descriptor.get === undefined
- ? undefined
- : descriptor.get.call(receiver);
+ : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);
if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);
}