Вы можете заменить f на функцию, которая вызывает notifyObserver:
f = (function(oldF){
return function(){
notifyObserver();
oldF();
};
})(f);
Таким образом, вам не нужно изменять (старый) сам f.Конечно, это не включает ваши bind
функции.Я бы, вероятно, создал для этого некоторый класс менеджера, в котором вы можете зарегистрировать обработчики событий
manager.bind('f', function(){...});
И создание функции-оболочки будет выглядеть более похоже на
f = (function(oldF){
return function(){
manager.notify('f');
oldF();
};
})(f);
Вы можете обобщить созданиеиз оболочки:
function wrap(methodToWrap, eventName){
return function(){
manager.notify(eventName);
return methodToWrap.apply(this, arguments);
}
}
(Это работает с любым количеством аргументов и возвращаемых значений!)
А затем выполните что-то вроде:
f = wrap(f, "f");
См .: http://jsfiddle.net/NBefc/2/ (обновлено, нет с возвращаемыми значениями)