methods-plain.js 831 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* eslint id-length: 0 */
  2. "use strict";
  3. var d = require("d");
  4. require("../ext/dispose");
  5. require("../ext/ref-counter");
  6. module.exports = function (t, a) {
  7. var value = [], obj = {};
  8. Object.defineProperties(
  9. obj,
  10. t({
  11. someFn: d(
  12. function (x, y) {
  13. a(this, obj);
  14. return x + y;
  15. },
  16. {
  17. refCounter: true,
  18. dispose: function (val) {
  19. value.push(val);
  20. }
  21. }
  22. )
  23. })
  24. );
  25. obj = Object.create(obj);
  26. obj.someFn(3, 7);
  27. obj.someFn(5, 8);
  28. obj.someFn(12, 4);
  29. a.deep(value, [], "Pre");
  30. obj.someFn(5, 8);
  31. obj.someFn.deleteRef(5, 8);
  32. a.deep(value, [], "Pre");
  33. obj.someFn.deleteRef(5, 8);
  34. a.deep(value, [13], "#1");
  35. value = [];
  36. obj.someFn.deleteRef(12, 4);
  37. a.deep(value, [16], "#2");
  38. value = [];
  39. obj.someFn(77, 11);
  40. obj.someFn.clear();
  41. a.deep(value, [10, 88], "Clear all");
  42. };