EDIT: ОК, я считаю, что следующие решения действительны:
-
Используйте плагин 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!"
Я пытался что-то взломать пару часов, но пока не повезло.