Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2012, 17:50
Аватар для Lerayne
Интересующийся
Отправить личное сообщение для Lerayne Посмотреть профиль Найти все сообщения от Lerayne
 
Регистрация: 05.05.2011
Сообщений: 10

Насколько безопасны бесконечные цепочки ссылок через прототип?
Решил оптимизировать свой код -- перевести один сервис на нормальное прототипное программирование и заодно по возможности избавиться от замыканий, чтобы уменьшить использование памяти.

В ходе раздумий над способом реализации этой задумки возникла такая схема:

// некий объект, хранящий всё состояние программы
globals = {
	ui: {},
	foo: null
};

// просто класс
Interface = function(elem){
	var g = this.globals;

	this.bar = 1;
	g.foo = 2;

	elem.innerHTML = 'ready';
}

Interface.prototype = {
	globals: globals
}

// класс, запускающий программу после загрузки всего dom
Starter = function(){
	var g = this.globals;

	var elem = document.getElementById('elem');

	g.ui = new Interface(elem);
}

Starter.prototype = {
	globals: globals
}

// этот объект можно создать только по завершении загрузки, так как он использует селектор
window.onload = function(){
	new Starter();
}


Как видно из листинга - я передаю глобальный объект в прототип каждого класса. С одной стороны очень удобно - любой класс может считать или изменить любое поле объекта.
С другой - у меня возникают сомнения, а не вызовет ли такая бесконечная цепочка утечек похлеще чем от замыканий?

На картинке - структура объекта globals с наглядной демонстрацией его закольцованости.



Если такой метод некорректен или небезопасен - что можете посоветовать?

Последний раз редактировалось Lerayne, 10.05.2012 в 18:02.
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2012, 18:06
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

А откуда утечкам взяться? Ссылка — она на то и ссылка, что места не ест, а лишь хранит информацию о том, где искать объект.
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2012, 19:58
Аватар для Lerayne
Интересующийся
Отправить личное сообщение для Lerayne Посмотреть профиль Найти все сообщения от Lerayne
 
Регистрация: 05.05.2011
Сообщений: 10

Ну, утечки-то возникают не только когда что-то усиленно жрет память, но и когда сборщик не может ее освободить там, ггде нужно. При перекрестных ссылках между js-объектом и dom-объектом, об этом сейчас только ленивый не писал.

Хотя, если вы правы -- я только порадуюсь. Уж больно паттерн заманчивый.)
Ответить с цитированием
  #4 (permalink)  
Старый 10.05.2012, 23:04
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Проблему циклических ссылок научились решать уже давно. Да и в самих нативных объектах JS'а циклические ссылки не редкость.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск