UNPKG

1.71 kBJavaScriptView Raw
1var $ = require('../internals/export');
2var anObject = require('../internals/an-object');
3var isObject = require('../internals/is-object');
4var has = require('../internals/has');
5var definePropertyModule = require('../internals/object-define-property');
6var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
7var getPrototypeOf = require('../internals/object-get-prototype-of');
8var createPropertyDescriptor = require('../internals/create-property-descriptor');
9
10// `Reflect.set` method
11// https://tc39.github.io/ecma262/#sec-reflect.set
12function set(target, propertyKey, V /* , receiver */) {
13 var receiver = arguments.length < 4 ? target : arguments[3];
14 var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);
15 var existingDescriptor, prototype;
16 if (!ownDescriptor) {
17 if (isObject(prototype = getPrototypeOf(target))) {
18 return set(prototype, propertyKey, V, receiver);
19 }
20 ownDescriptor = createPropertyDescriptor(0);
21 }
22 if (has(ownDescriptor, 'value')) {
23 if (ownDescriptor.writable === false || !isObject(receiver)) return false;
24 if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) {
25 if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
26 existingDescriptor.value = V;
27 definePropertyModule.f(receiver, propertyKey, existingDescriptor);
28 } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V));
29 return true;
30 }
31 return ownDescriptor.set === undefined ? false : (ownDescriptor.set.call(receiver, V), true);
32}
33
34$({ target: 'Reflect', stat: true }, {
35 set: set
36});