将全局变量传递到函数的作用域中

时间:2018-11-17 18:32:13

标签: javascript node.js

我想为单个函数覆盖console.log,而又不影响函数外部的全局变量。本质上,我希望myFunction()调用与应用程序其余部分不同的console.log

请注意,我无法修改函数的主体,这对我来说很棘手。

还要注意,下面的示例中的myFunction是异步的(快速路由器),因此调用该函数后,我不能简单地恢复原始的console.log

__originalConsole = console.log.bind(console);
invokeFunction() {
  const customConsole = (...args) => {
      args.unshift(`custom_behavior`);
      __originalConsole.apply(this, args);
  }
  myFunction() // <-- needs to access `customConsole` as though it were `console.log`
}

1 个答案:

答案 0 :(得分:0)

您快到了,剩下的就是覆盖console.log并在函数调用后将其重置。

如果您的自定义记录器需要访问console.log,则需要使用bind()originalConsole附加为customConsole的参数。

function myFunction() {
  console.log('Hello, world!');
}

function customConsole(log, ...args) {
  log('CUSTOM', ...args);
}

function invokeFunction() {
  // Store a reference to the original console.log
  const originalConsole = console.log;

  // Overwrite console.log with custom logging function
  console.log = customConsole.bind(null, originalConsole);

  // Make function call
  myFunction();

  // Restore console.log for future use
  console.log = originalConsole;
}

invokeFunction();