创建一个原型函数来摧毁自己?

时间:2013-05-28 17:31:30

标签: javascript garbage-collection prototype

我目前正在使用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);

但这不起作用,我已经没有关于如何使其破坏自我的想法,基本上在没有更多用户留在占用者之后,我希望它从内存和所有内容中删除。谢谢!

2 个答案:

答案 0 :(得分:1)

您的Room destroy() / dispose()方法应该释放必须明确释放的所有资源(例如不自动提交的开放事务)并发出任何已知信号观察者“或”订阅者“它正在关闭(所以他们可以删除他们对它的引用)。这可以包括您的RoomContainer,也可以让RoomContainer负责删除对过期房间的引用。在任何一种情况下,一旦没有对房间的引用,垃圾收集器就可以自由地从内存中删除它。

答案 1 :(得分:1)

快速回答是:你不能。

很长的答案是:销毁JS对象和后续的垃圾收集只能在范围之外。你需要追捕并delete /取消设置项目的所有引用。我知道这很糟糕,但事情就是如此。

就像在PHP中一样,原型方法中的this实际上不是对象本身,而只是它的接口。你不能设置它,你可以重新定义它(否则会导致混乱和混乱)。

正确的形式是让其他东西,一个对象管理器,知道你打算删除它。此时,此对象执行实际的GC。