Мне нужен объект Flyweight, поэтому я создал объект и сохранил его экземпляры на карте следующим образом:
const FlyweightNumber = (function(){
"use strict";
const instances = new Map();
class FlyweightNumber{
constructor(number){
Object.defineProperty(this, 'number', {
value: number
});
if(!instances.get(number)){
instances.set(number, this);
}
else {
return instances.get(number);
}
}
toString() {
return this.number;
}
valueOf(){
return this.number;
}
toJSON(){
return this.number;
}
}
return FlyweightNumber;
})();
module.exports = FlyweightNumber;
Проблема в том, что когда я больше не использую значение FlyweightNumber, оно все еще находится впамяти, хранящейся в этой карте.
Поскольку WeakMap и WeakSet должны позволять сборщику мусора очистить его, если он больше не используется, как я могу написать конструктор для возврата объекта в WeakSet или WeakMap или создатьновый объект, если он больше не хранится?