javascript-如何使类的实例可比较并且可以同时进行垃圾回收?

前端之家收集整理的这篇文章主要介绍了javascript-如何使类的实例可比较并且可以同时进行垃圾回收? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在编写一个类,并希望实例通过<,>,==进行比较.

对于<和&gt ;,valueOf可以正常工作. ==是不同的,但是我也想拥有它.我可以轻松地实现isEqual方法,但这并不相同. 我当前的解决方案是为所有创建的对象缓存:

const cache = {}

class Comparable {
  constructor (id) {
    if (cache[id]) return cache[id]

    cache[id] = this
  }
}

这样,比较就可以了.不幸的是,这也阻塞了垃圾收集器.

是否有另一种启用new Comparable(42)== new Comparable(42)的方式,而这并不妨碍GC?

最佳答案
您似乎正在寻找hash consing,但是由于您遇到这种情况,因此无法有效实现,因为JavaScript不(yet)不支持弱(或软)引用.

不,不可能覆盖JS中的任何运算符,包括==. ==将始终通过引用比较两个对象,您对此无能为力.最好的选择是创建一个比较方法.

原文链接:https://www.f2er.com/js/531126.html

猜你在找的JavaScript相关文章