Я не уверен, почему вы делаете это сложно. Javascript - это язык для сборки мусора. Все, что вам нужно сделать, чтобы что-то освободить, - это убедиться, что на него больше нет ссылок.
Итак, если вы начнете с:
var obj = {
data: "foo";
};
и теперь вы хотите избавиться или «освободить» этот объект, все, что вам нужно сделать, это очистить ссылку на него:
obj = null;
Поскольку в вашем коде больше нет ссылок на ту структуру данных, которую вы изначально определили и присвоили obj
, сборщик мусора освободит ее.
Объект не может уничтожить себя (потому что другие вещи могут иметь ссылки на него). Вы разрешаете его освобождение, удаляя все ссылки на него. Объект может очистить свои собственные ссылки на другие вещи, хотя это обычно не требуется, так как удаление всех ссылок на сам объект также позаботится о ссылках, которые он содержит (за исключением некоторых ошибок с циклическими ссылками между JS и DOM в некоторых старых браузерах - в частности, в IE).
Один раз, когда вы можете явно «удалить» что-то, это если у вас есть свойство объекта, который вы хотите удалить. Итак, если у вас есть:
var obj = {
data: "foo",
count: 4
};
И вы хотите удалить свойство «data», вы можете сделать это с помощью:
delete obj.data;
из, если свойство / ключ были назначены программно через переменную, подобную этой:
var key = "xxx";
obj[key] = "foo";
вы можете удалить этот ключ с помощью:
delete obj[key];