set.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var getPrototypeOf = require("./getPrototypeOf");
  2. var superPropBase = require("./superPropBase");
  3. var defineProperty = require("./defineProperty");
  4. function set(target, property, value, receiver) {
  5. if (typeof Reflect !== "undefined" && Reflect.set) {
  6. set = Reflect.set;
  7. } else {
  8. set = function set(target, property, value, receiver) {
  9. var base = superPropBase(target, property);
  10. var desc;
  11. if (base) {
  12. desc = Object.getOwnPropertyDescriptor(base, property);
  13. if (desc.set) {
  14. desc.set.call(receiver, value);
  15. return true;
  16. } else if (!desc.writable) {
  17. return false;
  18. }
  19. }
  20. desc = Object.getOwnPropertyDescriptor(receiver, property);
  21. if (desc) {
  22. if (!desc.writable) {
  23. return false;
  24. }
  25. desc.value = value;
  26. Object.defineProperty(receiver, property, desc);
  27. } else {
  28. defineProperty(receiver, property, value);
  29. }
  30. return true;
  31. };
  32. }
  33. return set(target, property, value, receiver);
  34. }
  35. function _set(target, property, value, receiver, isStrict) {
  36. var s = set(target, property, value, receiver || target);
  37. if (!s && isStrict) {
  38. throw new Error('failed to set property');
  39. }
  40. return value;
  41. }
  42. module.exports = _set;