1

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

但这不起作用,我已经没有关于如何让它自我毁灭的想法,基本上在居住者中没有更多用户之后,我希望它从记忆中删除。谢谢!

4

2 回答 2

1

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

于 2013-05-28T17:37:52.333 回答
1

快速回答是:你不能。

长答案是:销毁 JS 对象和随后的垃圾收集只能在范围之外进行。您将需要查找和delete/取消设置项目的所有引用。这很糟糕,我知道,但就是这样。

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

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

于 2013-05-28T17:39:08.037 回答