【问题标题】:Finding the line number FROM WHERE the call to current function occured从调用当前函数的位置查找行号
【发布时间】:2013-12-06 15:43:54
【问题描述】:

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

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? 的副本,但事实并非如此。这个问题不是关于查找当前行号

【问题讨论】:

标签: javascript logging reflection


【解决方案1】:

你可以构造一个Error对象并查看“stack”属性:

$(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 对象的“stack”属性未标准化,但在 Firefox、Chrome、IE10+ 和 Safari 6 中可用。(不了解移动浏览器。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2013-08-02
    相关资源
    最近更新 更多