1
class Cat {

  storage = new Map()  

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

}

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

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

4

1 回答 1

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
于 2017-08-30T16:31:11.953 回答