¿Cómo hago que las instancias de una clase sean comparables y que se pueda recolectar basura al mismo tiempo?

Estoy escribiendo unclass y quiere que las instancias sean comparables por<, >, ==.

Por< y>, valueOf funciona bien

== es diferente, sin embargo, pero quiero tener eso también. Podría implementar fácilmente unaisEqual método, pero eso no es lo mismo.

Mi solución actual es un caché para todos los objetos creados:

const cache = {}

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

    cache[id] = this
  }
}

De esa manera, la comparación funciona. Desafortunadamente, esto también bloquea al recolector de basura.

Hay otra forma de habilitarnew Comparable(42) == new Comparable(42), eso no impide GC?

Respuestas a la pregunta(2)

Su respuesta a la pregunta