1

我正在尝试删除使用原型对象创建的对象。删除似乎不起作用。调用delete之后,对象还在……对象是通过调用创建的:

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 项目上手动调用 delete,效果很好。但是作为最后一步删除对象本身不起作用:

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;
}

我该如何删除这个派生对象?

4

3 回答 3

3

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

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

于 2013-06-05T16:21:29.233 回答
1

这是删除有效的情况:

var b = [1,2,3];

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

当您想清除 b 使用的内存时,您只需将其重新分配为空。

 b = null;

浏览器的垃圾收集器将从那里开始处理它。

于 2013-06-05T16:23:41.210 回答
1

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

于 2013-06-05T16:22:00.433 回答