好的,我有一个对象,我想对对象中的所有方法应用一个回调函数。到目前为止,这是我尝试过的:
var namespace = {
foo : 'bar',
foobar : function() { console.log('call from foobar!')},
someFunc : function() { console.log('call from someFunc!')},
someFunc2 : function() { console.log('call from someFunc2!')}
}
var logger = {
_callback : function () {
console.log('call from logger!',arguments);
}
}
for (var m in namespace) {
if ( namespace.hasOwnProperty(m) && (typeof namespace[m]=='function') ) {
logger[m] = namespace[m];
namespace[m] = function() {
logger._callback(arguments);
logger[m].apply(this, arguments);
}
}
}
namespace.foobar('foo');
namespace.someFunc('bar');
namespace.someFunc2('bar2');
这是记录到控制台的内容:
call from logger! [["foo"]]
call from someFunc2!
call from logger! [["bar"]]
call from someFunc2!
call from logger! [["bar2"]]
call from someFunc2!
如您所见,出于某种原因,namespace
的所有 3 个方法都输出 'call from someFunc2!
,这是错误的。我不确定这里的问题是什么..我做错了什么?
最佳答案
尝试
for (var m in namespace) {
if ( namespace.hasOwnProperty(m) && (typeof namespace[m]=='function') ) {
logger[m] = namespace[m];
(function(index){
namespace[index] = function() {
logger._callback(arguments);
logger[index].apply(this, arguments);
};
})(m);
}
}
否则 namespace[m] = function(){}
将使用最后一个 m
关于javascript - 在函数上使用 .apply 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395243/