我有一个轻量级的日志记录功能。为了简单起见,它类似于:
function log(msg){
console && console.log && console.log(msg);
}
which i have in a seperated file "Logging.js".
现在从另一个文件让我说“hello.js”:
log("Hello");
现在,如果我调用该函数,控制台将始终显示 Logging.js:2
作为发生日志记录的位置。所以没有机会确定消息的来源。日志消息应为 hello.js:1
。
是否可以从调用日志函数的位置,找出调用的行号,然后操作控制台显示的行号?
或者有更简单的解决方案吗?
注意,请仔细阅读: 与当前行号无关。它是关于函数调用发生的行号,以及如何操作日志输出,以便它显示调用函数的行号。这与错误或捕获错误无关。
我已经在前一段时间发布了这个问题,它被否决并声明为 How can I determine the current line number in JavaScript? 的副本很快,但事实并非如此。这个问题不是关于找到当前行号。
最佳答案
您可以构造一个 Error 对象并查看“堆栈”属性:
$(function() {
function a() {
b();
}
function b() {
c();
}
function c() {
$('#e').html(new Error().stack.replace(/\n/g, '<br>'));
}
a();
});
这将显示:
c@http://jsbin.com/aLuKUSU/1:33
b@http://jsbin.com/aLuKUSU/1:29
a@http://jsbin.com/aLuKUSU/1:25
@http://jsbin.com/aLuKUSU/1:36
b.Callbacks/c@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
b.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
.ready@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
H@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
Error 对象的“堆栈”属性未标准化,但在 Firefox、Chrome、IE10+ 和 Safari 6 中可用。(不知道移动浏览器。)
关于javascript - 从调用当前函数的位置查找行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427961/