class Cat {
storage = new Map()
constructor(id) {
if(storage.has(id)) return storage.get(id)
storage.set(id, this)
}
}
如果在应用程序中未使用对它的引用,我希望从存储中删除该对象。但是如果应用程序中的链接存在,并且我们尝试创建具有相同ID的对象,则返回此对象,而不是创建新对象。如何在没有析构函数的情况下做到这一点?
但是当对象的所有引用从应用程序中消失,并且对象从存储中删除时,那么创建对象的新实例没有什么不好的
答案 0 :(得分:0)
Javascript不支持此功能。我想出了一个解决方法:
在每个构造对象时,我们将链接数量增加一个,并且每次解构时我们将链接数量减少一个。当链接数为零时,我们手动从存储中删除该对象。
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