gpt4 book ai didi

Javascript Flyweight 与 WeakMap 或 WeakSet

转载 作者:行者123 更新时间:2023-12-03 01:50:41 25 4
gpt4 key购买 nike

我想要一个 Flyweight 对象,因此我创建了一个对象并将其实例存储在 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 中的对象,或者在不再存储时创建一个新对象?

最佳答案

您正在寻找soft reference实现您的号码缓存。不幸的是,JS 没有这些。

它的 WeakMap 也不会创建弱引用,它是一个 ephemeron实际上。它不允许您观察对象是否已被收集。

关于Javascript Flyweight 与 WeakMap 或 WeakSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50426282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com