РЕДАКТИРОВАТЬ: ОК, я считаю, что следующие решения действительны:
Используйте плагин jQuery AOP. Он в основном оборачивает старую функцию вместе с ловушкой в сэндвич функции и переназначает ее на имя старой функции. Это вызывает вложение функций с каждым новым добавленным хуком.
Если jQuery для вас не пригоден, просто разграбьте исходный код, в плагине не было никаких зависимостей jQuery, а исходный код прост и очень мал.
Иметь объект, описывающий все хуки и их цели, и один для хранения исходной неизмененной функции. При добавлении нового хука обтекание будет переделано вокруг исходной функции вместо того, чтобы повторно обернуть предыдущую функцию обтекания.
Вы избегаете вложенных функций, и вместо этого получаете два объекта для обработки. Потенциально, это также может означать более простую обработку крючков, если вы часто добавляете / удаляете крючки и вышли из строя.
Я пойду с первым, так как это уже сделано, и у меня нет проблем с производительностью. А поскольку на исходные функции это не влияет, даже если я переключаю методы перехвата, мне нужно всего лишь повторить добавление перехвата, что может быть просто некоторыми простыми операциями поиска и замены.
Привет
Можно ли создать механизм, в котором функция A может иметь набор хуков (функций, которые будут выполняться до / после функции A)?
В идеале, функция A не должна знать о функции перехвата, поэтому мне не нужно изменять исходный код функции A для вызова перехватчиков. Что-то вроде:
A = function(){
alert("I'm a naive function");
};
B = function(){
alert("I'm having a piggyback ride on function A!"+
"And the fool doesn't even know it!");
};
addHook(B, A)//add hook B to function A
A()
//getting alerts "I'm a naive function"/"I'm having a
//piggyback ride on function A! And the fool doesn't even know it!"
Я пару часов пытался что-то взломать, но пока не повезло.