такс. попробую обьяснить проблему на как можно более абстрактном примере.
есть две функции, которые совершают аналогичные в конечном результате действия. Их совместить низя. Но проблема не в этом.
Эти две функции разрастаются ещё на две (раньше на три, пока я не смекнул, как можно совместить две из них в одну, это неважно).
В итоге получается аж 4 функции!
это введение. теперь, собственно, перейду к абстрактному коду на примере одной из двух функций :
итак, есть две функции (т.к. корневая разрастается) : A и B.
function A(){};
function B(){};
функция B оперирует с переданным ей аргументом с переданными её настройками. Так сказать, "опциональное декорирование".
function B(obj, opt1, opt2){
/*её тело совсем неважно, но пусть будет так :*/
obj[opt1] = opt2;
};
Функция A, в свою очередь, принимает аргументы для настройки, генерирует аргументы для B и вскармливает всё это функции B :
function A(opt, another_opt){
var z = "";
z = "my string is : "+opt+" and it contains "+another_opt;
var d = {};
B(d, "options", z);
/*.....*/
};
Обе функции являются процедурными, т.е. не возвращают результата.
как видите, первая функция является "надстройкой" над второй. Проблема заключается в том, что необходимо сохранить последовательность действий A и B.
Вопрос заключается в том, как можно их совместить в одну. Нет, не тупо сделать вторую свойством первой, а именно совместить.
В голове крутится аргумент-переключатель Boolean-типа, который будет находиться в начале функции и выполнять определённые действия, но в этом случае функция превращается в рекурсивную. На примере кода это будет :
function A(switcher,args/*1,2,3*/){
if(switcher === true){
/*привычные для A действия*/
var d = {};
A(true, d, arg2, arg3);
// дальшейшие операции с d.
} else {
/*тут код функции B*/
arg1[arg2] = arg[3];
}
};
Вопрос к вам, о форумчане : как бы это сделали вы и как это логичнее сделать?