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

标签 javascript

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

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/

相关文章:

javascript - html5 javascript 工作流程图生成器

javascript - Object.assign 和 object spread 之间的区别(使用 [...] 语法)?

javascript - 如何获取两个日期之间的天数

javascript - 在 HTML 文件之间传递变量

javascript - 如何将 Three.js 与 React 结合使用

javascript - 通过 Javascript POST 到 Google Cloud Vision 的问题

javascript - Protractor 和 Angular : How to test two pages in an app, 一个接一个?

javascript - 如何通过管道传输到文件(NodeJS)

javascript - 在 asp.net 母版页中显示 JavaScript 文件路径的 404 状态

php - 如果网站已启动,如何从 php/html 检查?