JavaScript更改控制台调用堆栈
正确行为
当我console.log()直接从函数调用时,我调用的堆栈(函数和文件)在开发工具控制台中是正确的,正如预期的那样。
main.js:
function main() {
// Works correctly
console.log('Hello from main()!');
}
安慰:
Hello from main()! ... main.js:3
我想要的是
现在,当我添加第二个文件debug.js并console.log从那里调用时,我调用的文件是debug.js,这是正确的...但我需要debug()像在main.js. 不知何故,我需要修改调用者、堆栈或跟踪来欺骗console.log()它是从 调用的main.js,而实际上是从deubg.js.
代码
debug.js:
function debug(msg) {
console.log(msg)
}
main.js
function main() {
debug('Hello world!') // debug() in debug.js
}
function main() {
debug('Hello world!') // debug() in debug.js
}
行为
目前的行为:
我想要的行为:
Hello world! ... debug.js:2
回答
我相信这里的问题是控制台日志通常从它运行的任何地方执行。但是,如果您要传回一个执行控制台日志的函数,这可能会如您所愿。你可以试试下面的代码吗?
尝试 #1
调试.js:
function debug(msg) {
return (function(msg) { console.log(msg) })(msg)
}
主要.js:
function main() {
debug('Hello world!')
}
如果这不起作用,你可以试试这个:
尝试#2
调试.js:
function debug() {
return function(msg) { console.log(msg) }
}
主要.js:
function main() {
debug()('Hello world!')
}