有没有一种方法,以在存储效率的方式在Javascript模拟值对象?

时间:2019-02-02 15:36:39

标签: javascript functional-programming equality value-objects

我想在Javascript模拟值对象依靠参考身份。这是我的方法:

const ValObj = toString => {
  const m = new Map();

  return o => {
    const s = toString(o);

    return m.has(s)
      ? m.get(s)
      : (m.set(s, o), o);
  };
};

const Triple = ValObj(xs => xs.toString());

const xs = Triple([1,2,3]),
  ys = Triple([1,2,3]),
  zs = Triple([3,2,1]);
  
console.log(
  xs === ys); // true
  
console.log(
  xs === zs); // false

当然,这仅适用于简单的对象类型,可以为它们定义toString函数,并提供一个将此类对象视为不可变的对象。

不幸的是,Map内部的ValObj显然会干扰垃圾回收。如何避免/减少内存泄漏?或者是有用于模仿值对象的替代方法?

0 个答案:

没有答案