javascript - 从调用当前函数的位置查找行号

标签 javascript logging reflection

我有一个轻量级的日志记录功能。为了简单起见,它类似于:

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();
});

JSBin

这将显示:

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/

相关文章:

JavaScript 计算 2 个日期之间的年份和月份

javascript - 使用 jQuery UI Draggable 拖动到 iFrame

c++ - 在 Android 上使用 Boost.Log 进行 logcat

.net - 忽略传递给 Type.GetType() 的程序集限定名称中的版本

c# - 有没有办法通过 C# 代码获取类中所有 namespace 'using'?

javascript - 自动完成功能无法正常工作

javascript - 我可以在 TR 点击事件中排除按钮点击吗?

java - 如何使用以下详细信息将 java 对象传递给 oracle 存储过程

c++ - 在没有 C 预处理器的情况下记录表达式的文本及其结果

java - 传递类型 Class 的实例而不是 Class 表示的类