gpt4 book ai didi

javascript - WeakMap 模式单例无内存泄漏

转载 作者:行者123 更新时间:2023-11-28 04:14:41 29 4
gpt4 key购买 nike

class Cat {

storage = new Map()

constructor(id) {
if(storage.has(id)) return storage.get(id)
storage.set(id, this)
}

}

如果应用程序中未使用对该对象的引用,我希望将该对象从存储中删除。但是,如果应用程序中的链接存在,并且我们尝试创建具有相同 ID 的对象,则返回该对象,而不是创建新对象。我怎样才能在没有析构函数的情况下做到这一点?

但是,当对该对象的所有引用从应用程序中消失,并且对象从存储中删除时,创建该对象的新实例也没什么不好

最佳答案

Javascript不支持此功能。我想出了一个解决方法:

在每次对象构造时,我们将链接数量增加 1,而在每次解构时,我们将链接数量减少 1。当链接数为零时,我们手动从存储中删除该对象。

class Cat {

storage = {}


constructor(id) {
if(storage[id]) {
var cat = storage[id]
cat.links++
return cat
}

storage[id] = this
this.links = 1
}


destroy() {
if(--this.links) {
delete storage[this._id]
}
}

}

用法:

cat1 = new Cat('id')
cat2 = new Cat('id')

cat1 === cat2 // true
cat1.destroy() // storage NOT empty
cat2.destroy() // storage is empty

关于javascript - WeakMap 模式单例无内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45964137/

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