我想为单个函数覆盖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`
}
答案 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();