gpt4 book ai didi

javascript - 在函数上使用 .apply 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:09 24 4
gpt4 key购买 nike

好的,我有一个对象,我想对对象中的所有方法应用一个回调函数。到目前为止,这是我尝试过的:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com