问题描述
在 a.js
中,我有一个 test();
函数,我正在从 b.js
调用
我还有以下代码可以帮助我找到 b.js
的哪一行正在调用该函数,并且工作正常。但我也想得到文件名,下面的代码给了我 a.js
而不是 b.js
.. 任何指针?
Object.defineProperty(global,"__stack",{
get() {
const orig = Error.prepareStackTrace;
Error.prepareStackTrace = function(_,stack) {
return stack;
};
const err = new Error;
Error.captureStackTrace(err,arguments.callee);
const stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
},});
Object.defineProperty(global,"__line",{
get() {
return __stack[1].getLineNumber();
},"__filename",{
get() {
return __stack[1].getFileName();
},});
解决方法
好吧,我不知道为什么,但是
Object.defineProperty(global,"__filename",{
get() {
return __stack[1].getFileName();
},});
提供的部分代码没有按预期工作。不知道它在做什么,我所知道的是我尝试了以下操作并且工作正常。
Object.defineProperty(global,"__callerInfo",{
get() {
return [__stack[1].getLineNumber(),__stack[1].getFileName()];
},});
我只是将行号保存在一个常量中,将文件名保存在另一个常量中