Показать сообщение отдельно
  #1 (permalink)  
Старый 10.11.2014, 18:58
Интересующийся
Отправить личное сообщение для javacrypt Посмотреть профиль Найти все сообщения от javacrypt
 
Регистрация: 10.11.2014
Сообщений: 12

Утечка памяти
Подскажите кто-нибудь из опытных.
У меня есть дерево меню, которое содержит одинарные узлы и список узлов, каждый узел имеет ссылку на родительский узёл. Вопрос произойдёт ли утечка памяти если я буду удалять узел, который содержит список узлов? Посмотрите на метод remove(), правильно ли я удаляю узлы?
function Button(name) {
	this.id = -1;
	this.parent = null;
	this.name = name;
	this.html = "<div>Кнопка</div>";
}
		
Button.prototype = {
	setId: function(id) {
		this.id = id;
	},
			
	setParent: function(parent) {
		this.parent = parent;
	},
					
	remove: function() {
		this.parent = null;
		this.html = "";
	}
}

		
function List() {
	this.id = 0;
	this.children = {};
}
		
List.prototype = {
	parent: null,

	setParent: function(parent) {
		this.parent = parent;
	},
			
	add: function(child) {
		this.children[this.id++] = child;
		child.setParent(this);
	},
			
	remove: function(id) {
		if (id in this.children) {
					
			var node = this.children[id];

			if (node.children) {
				for (var k in node.children) {
					node.remove(k);
				}
				delete this.children[id];
				node.parent = null;
				node = null;
			} else {
				node.remove();
				delete this.children[id];
				node = null;
			}
		}
	}
}
		
var root = new List();
		
var menu = new List();
var submenu = new List();
		
submenu.add(new Button("Подпункт 1"));
submenu.add(new Button("Подпункт 2"));
submenu.add(new Button("Подпункт 3"));
		
menu.add(new Button("Кнопка 1"));
menu.add(submenu);
root.add(menu);
		
console.log(menu.children);
//menu.remove(1);
//console.log(menu.children);

Последний раз редактировалось javacrypt, 10.11.2014 в 19:01.
Ответить с цитированием