[英]Best way implement destructor in JS
考虑下面的代码
class Hello {
constructor(name) {
this.interval = setInterval(() => {
console.log('===', name)
}, 1000)
}
destroy() {
clearInterval(this.interval)
}
}
let h = new Hello('aaa')
// h.destory()
h = new Hello('bbb')
如果构造函数分配了一些资源,则在哪里释放资源? 据我目前的理解,当h
被重新分配给new Hello('bbb')
到持有new Hello('aaa')
内存时,应该由GC释放。
这是一个好习惯, new
与destroy
new
应该成对出现吗?
不幸的是(我相信)没有办法捕获对象的垃圾回收来执行某些操作。 相反,您需要通过明确显示创建/删除内容来构建自己的管理,以清理计时器等资源。 我知道您的示例是一个玩具,但是您不能简单地按照显示的方式重新分配。 您需要执行以下操作:
const objects = {}
const createObject = name => {
const obj = new Hello(name)
objects[name] = obj
return obj
}
const deleteObject = name => {
objects[name].destroy()
delete objects[name]
}
let h = createObject('aaa')
deleteObject('aaa') // interval cleared but not gc'd because of h
h = createObject('bbb') // all references to aaa now gone
显然,这是一个简单的示例,并且将根据您的需求采用更优雅的方法来完成此操作,但希望您能理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.