2013-06-05 4 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); 

Я вручную вызываю delete на элементах 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 = null; 

Сборщик мусора для браузера позаботится об этом оттуда.

Смежные вопросы