Одна логическая ошибка в коде точно есть. Объясню ее на примере.
function setHandler(el){
var obj = new MyController(el);
$(el).on("click", function hand(){
alert(obj.name);
});
}
setHandler(element1);
setHandler(element2);
После выполнения данного кода в память браузера попадают:
- Функция setHandler
- Два объекта типа MyController
- Две функции hand - обработчики события onclick.
Да-да, для каждого вызова
setHandler создается своя функция
hand. Две (три, десять или даже миллион) разные функции с одинаковым телом. Все, что их отличает - область видимости, в которой они объявлены (к примеру, внутри каждой из них доступен свой obj).
Но, спрашивается, как мы можем оптимизировать потребление памяти в данной ситуации? А вот так:
function hand(){
var obj = $(this).data("obj");
alert(obj.name);
}
function setHandler(el){
var obj = new MyController(el);
$(el)
.data("obj", obj) //Как вариант
.on("click", hand)
;
}
setHandler(element1);
setHandler(element2);
Вынесем
hand в более высокую область видимости.
Теперь в памяти сохранены:
- Функция setHandler
- Функция hand
- Два объекта MyController