Object.defineProperty.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. function assert(x) { if (!x) throw 1; }
  2. try {
  3. var o = {};
  4. Object.defineProperty(o, "foo", { value: 1, writable: false, enumerable: false });
  5. assert(o.foo === 1);
  6. o.foo = 2;
  7. assert(o.foo === 1);
  8. var d = Object.getOwnPropertyDescriptor(o, "foo");
  9. assert(d.configurable === false);
  10. assert(d.enumerable === false);
  11. assert(d.writable === false);
  12. assert(d.value === 1);
  13. Object.defineProperty(o, "bar", { value: "hi", writable: true, enumerable: true });
  14. assert(o.bar === "hi");
  15. o.bar = "ho";
  16. assert(o.bar === "ho");
  17. d = Object.getOwnPropertyDescriptor(o, "bar");
  18. assert(d.configurable === false);
  19. assert(d.enumerable === true);
  20. assert(d.writable === true);
  21. assert(d.value === "ho");
  22. try {
  23. Object.defineProperty(o, "bar", { value: "xx", enumerable: false });
  24. } catch (e) {
  25. assert(e.name === "TypeError");
  26. }
  27. Object.defineProperty(o, "baz", { value: 9, configurable: true, writable: false });
  28. Object.defineProperty(o, "baz", { configurable: true, writable: true });
  29. d = Object.getOwnPropertyDescriptor(o, "baz");
  30. assert(d.configurable === true);
  31. assert(d.writable === true);
  32. assert(d.value === 9);
  33. console.log("PASS");
  34. } catch (e) {
  35. console.log(e)
  36. }