我正在编写一个类,并希望实例通过<,>,==进行比较.
对于<和> ;,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)不支持弱(或软)引用.
原文链接:https://www.f2er.com/js/531126.html不,不可能覆盖JS中的任何运算符,包括==. ==将始终通过引用比较两个对象,您对此无能为力.最好的选择是创建一个比较方法.