Lerayne
10.05.2012, 17:50
Решил оптимизировать свой код -- перевести один сервис на нормальное прототипное программирование и заодно по возможности избавиться от замыканий, чтобы уменьшить использование памяти.
В ходе раздумий над способом реализации этой задумки возникла такая схема:
// некий объект, хранящий всё состояние программы
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 с наглядной демонстрацией его закольцованости.
http://i.piccy.info/i7/8700808a1f7cd2eceed4e3c3dc95053b/1-5-7744/43846290/globals2_240.jpg (http://piccy.info/view3/2994320/a0efa950d478e21d03b77ac738d39009/)
Если такой метод некорректен или небезопасен - что можете посоветовать?
В ходе раздумий над способом реализации этой задумки возникла такая схема:
// некий объект, хранящий всё состояние программы
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 с наглядной демонстрацией его закольцованости.
http://i.piccy.info/i7/8700808a1f7cd2eceed4e3c3dc95053b/1-5-7744/43846290/globals2_240.jpg (http://piccy.info/view3/2994320/a0efa950d478e21d03b77ac738d39009/)
Если такой метод некорректен или небезопасен - что можете посоветовать?