我目前正在使用Node.js中的sockets.io,我有一个名为Rooms的类,它们的功能是自解释的,它的基本模型如下:
Room (owner)
this.owner = owner
occupants = []
Room.prototype = {
sendMessage()
getUsers()
leaveParty()
}
但是我想制造一个破坏它的自我,我试着去做,
Room.prototype.destroy = function() {
this = undefined
}
然后做
var roomVariable = new Room('blah');
roomVariable.destroy.call(roomVariable);
但这不起作用,我已经没有关于如何使其破坏自我的想法,基本上在没有更多用户留在占用者之后,我希望它从内存和所有内容中删除。谢谢!
答案 0 :(得分:1)
您的Room
destroy()
/ dispose()
方法应该释放必须明确释放的所有资源(例如不自动提交的开放事务)并发出任何已知信号观察者“或”订阅者“它正在关闭(所以他们可以删除他们对它的引用)。这可以包括您的RoomContainer
,也可以让RoomContainer
负责删除对过期房间的引用。在任何一种情况下,一旦没有对房间的引用,垃圾收集器就可以自由地从内存中删除它。
答案 1 :(得分:1)
快速回答是:你不能。
很长的答案是:销毁JS对象和后续的垃圾收集只能在范围之外。你需要追捕并delete
/取消设置项目的所有引用。我知道这很糟糕,但事情就是如此。
就像在PHP中一样,原型方法中的this
实际上不是对象本身,而只是它的接口。你不能设置它,你可以重新定义它(否则会导致混乱和混乱)。
正确的形式是让其他东西,一个对象管理器,知道你打算删除它。此时,此对象执行实际的GC。