es6.reflect.set.js 1.0 KB

1234567891011121314151617181920212223242526272829
  1. // 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
  2. var $ = require('./$')
  3. , has = require('./$.has')
  4. , $export = require('./$.export')
  5. , createDesc = require('./$.property-desc')
  6. , anObject = require('./$.an-object')
  7. , isObject = require('./$.is-object');
  8. function set(target, propertyKey, V/*, receiver*/){
  9. var receiver = arguments.length < 4 ? target : arguments[3]
  10. , ownDesc = $.getDesc(anObject(target), propertyKey)
  11. , existingDescriptor, proto;
  12. if(!ownDesc){
  13. if(isObject(proto = $.getProto(target))){
  14. return set(proto, propertyKey, V, receiver);
  15. }
  16. ownDesc = createDesc(0);
  17. }
  18. if(has(ownDesc, 'value')){
  19. if(ownDesc.writable === false || !isObject(receiver))return false;
  20. existingDescriptor = $.getDesc(receiver, propertyKey) || createDesc(0);
  21. existingDescriptor.value = V;
  22. $.setDesc(receiver, propertyKey, existingDescriptor);
  23. return true;
  24. }
  25. return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
  26. }
  27. $export($export.S, 'Reflect', {set: set});