我想要一个 Flyweight 对象,所以我创建了一个 Object 并将它的实例存储在 Map 中,如下所示:
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 值时,它仍在内存中,存储在此 Map 中。
由于 WeakMap 和 WeakSet 应该让垃圾收集器在不再使用它时将其清除,我如何编写构造函数来返回 WeakSet 或 WeakMap 中的对象,或者如果不再存储它则创建一个新对象?