【发布时间】:2012-03-26 16:43:38
【问题描述】:
关于 SO How to overload the calling process of any function 的问题。接受的答案实际上并没有按原样工作。问题在于传入的变量“fn”是字符串而不是函数。但是如果我将 fn() 更改为 NS[fn] (),它会创建一个无限循环。另一种方法是在 for 循环中使用 var 来跟踪 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
我的问题是:还有其他方法可以做类似的事情吗?我不是在谈论引用问题的另一个答案给出的调用者函数。这是一个很好的。但我只是想找到一种与上述答案相同的不同方法。非常感谢。
【问题讨论】:
标签: javascript loops closures