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

Javascript 创建一个原型函数来摧毁它自己?,javascript,garbage-collection,prototype,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 =

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

但这是行不通的,我已经没有办法让它自我毁灭了,基本上是在占用者中没有更多的用户之后,我想把它从内存中抹去。谢谢

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

快速回答是:你不能

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

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


正确的形式是让其他对象(对象管理器)知道您打算删除它。此时,此对象将执行实际GC。

您不能。您需要删除对该实例的所有引用,并允许垃圾回收器在访问该实例时进行清理。好吧,如果我取消设置指向该对象实例的所有内容,垃圾回收将处理其余内容?@XCritics:假设在任何范围内的任何位置都有0个对该对象的引用,它将获得GCed。@SébastienRenauld:只有在不计算循环引用(这是允许的)的情况下,才可以获得零引用