Projekt

Obecné

Profil

Stáhnout (1.29 KB) Statistiky
| Větev: | Revize:
1
// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
2
var dP = require('./_object-dp');
3
var gOPD = require('./_object-gopd');
4
var getPrototypeOf = require('./_object-gpo');
5
var has = require('./_has');
6
var $export = require('./_export');
7
var createDesc = require('./_property-desc');
8
var anObject = require('./_an-object');
9
var isObject = require('./_is-object');
10

    
11
function set(target, propertyKey, V /* , receiver */) {
12
  var receiver = arguments.length < 4 ? target : arguments[3];
13
  var ownDesc = gOPD.f(anObject(target), propertyKey);
14
  var existingDescriptor, proto;
15
  if (!ownDesc) {
16
    if (isObject(proto = getPrototypeOf(target))) {
17
      return set(proto, propertyKey, V, receiver);
18
    }
19
    ownDesc = createDesc(0);
20
  }
21
  if (has(ownDesc, 'value')) {
22
    if (ownDesc.writable === false || !isObject(receiver)) return false;
23
    if (existingDescriptor = gOPD.f(receiver, propertyKey)) {
24
      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
25
      existingDescriptor.value = V;
26
      dP.f(receiver, propertyKey, existingDescriptor);
27
    } else dP.f(receiver, propertyKey, createDesc(0, V));
28
    return true;
29
  }
30
  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
31
}
32

    
33
$export($export.S, 'Reflect', { set: set });
(199-199/303)