methods.js 880 B

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