По поводу вопроса о SO Как перегрузить процесс вызова любой функции . Принятый ответ на самом деле не работает как есть. Проблема заключается в том, что переданная переменная "fn" является строкой, а не функцией. Но если бы я изменил fn () на NS [fn] (), это создаст бесконечный цикл. Другой способ - использовать переменную внутри цикла for для отслеживания старых значений foo и bar, но это не сработает из-за замыкания. Я закончил тем, что добавил новый массив для отслеживания старых функций, как показано ниже:
NS = {
foo : function(){ console.log('foo'); },
bar : function(){ console.log('bar'); }
};
// <-- new code goes here
NS.foo();
NS.bar();
// new code below, that should go after definitions but before the calls
(function(){
var pre = function(){ console.log('pre'); },
post = function(){ console.log('post'); };
var temp = new Array();//Added line 1
for (var fn in NS) {
temp[fn] = NS[fn];//Added line 2
//original answer: NS[fn] = (function(fn){ return function(){ pre(); fn(); post(); }; })(fn);
NS[fn] = (function(fn){ return function(){ pre(); temp[fn](); post(); }; })(fn);
}
})();
NS.foo();//Added line 3
NS.bar();//Added line 4
Мой вопрос: есть ли другие способы сделать подобное? Я не говорю о функции вызывающего абонента, которая дана другим ответом на указанный вопрос. Это хороший. Но я просто пытаюсь найти другой подход, аналогичный приведенному выше ответу. Большое спасибо.