2013-06-05 47 views
1

我想删除用原型对象创建的对象。删除似乎不起作用。调用删除后,对象仍然存在...... 目的是通过调用创建:如何用原型删除对象

utils.createWithProto = function (o) { 
    function F() {} 
    F.prototype = o; 
    return new F(); 
}; 

以下下面是用于创建对象。

// Create a new object using DashboardControl as the prototype 
// A unique ID is set in newControl.config.controlId if it was not passed in config 
var proto = new DashboardControl(config); 
var newControl = Utils.createWithProto(proto); 

// Create a collection of Volume models 
newControl.volumeCollection = new VolumeCollection(); 
newControl.volumeCollection.init(newControl.config); 

// Create a view 
newControl.volumeView = new VolumeView(newControl, newControl.volumeCollection); 

我手动调用删除volumeCollection和volumeView项目,工作正常。但删除对象本身作为最后一步不起作用:

deleteObject: function(object) { 
    object.volumeCollection.stop(); 
    delete object.volumeCollection; 
    object.volumeView.stop(); 
    delete object.volumeView; 
    //delete object.config; 
    delete object.prototype; 
    delete object; 
    object = null; 
} 

如何删除此派生对象?

+0

你删除的部分在哪里? –

回答

3

delete只会删除对象上的属性。如果要删除变量上的值,则让它超出范围或为其分配新值。

一旦所有引用对象的属性和变量都消失,对象将被垃圾收集。

+0

谢谢昆汀。 在删除volumeView和volumeCollection是成员“____proto____”后剩下的部分。我想,如果我摆脱(删除),该对象将被有效地删除。但那一步我还没有采取。 – nvdstruis

1

如果该属性是对象引用,则delete命令将删除 属性,但不删除对象。如果垃圾收集器没有其他引用,该垃圾收集器将处理该对象的 。

1

这是删除的作品的情况下:

var b = [1,2,3]; 

delete b[2];   // b becomes [3, 4, undefined] 

当你想清除的B使用的内存,你可以将它重新分配给什么。

b = null; 

浏览器的垃圾收集器将从那里照顾它。