JQuery/Javascript получать уведомления при выполнении функции
var f = function() {
// Do something useful here
};
Есть ли способ "наблюдать" за этой функцией и получать уведомления о ее выполнении? Что-то похожее на bind в jQuery, но я хочу связывать функции, а не события dom?
Я не хочу что-то вроде этого:
var f = function() {
// Do something useful here
notifyObserver();
};
но я хочу что-то вроде этого:
f.bind(function() {
alert('F was executed.');
});
1 ответ
Вы можете заменить 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/ (обновлено, нет с возвращаемыми значениями)