一尘不染

在V8 JavaScript中访问行号(Chrome和Node.js)

node.js

在诸如C之类的语言上花费时间的JavaScript开发人员经常会错过使用某些类型的自省功能的能力,例如记录行号以及调用当前方法的方法。好吧,如果您使用的是V8(Chrome,Node.js),则可以采用以下方法。


阅读 226

收藏
2020-07-07

共1个答案

一尘不染

Object.defineProperty(global, '__stack', {
  get: function(){
    var orig = Error.prepareStackTrace;
    Error.prepareStackTrace = function(_, stack){ return stack; };
    var err = new Error;
    Error.captureStackTrace(err, arguments.callee);
    var stack = err.stack;
    Error.prepareStackTrace = orig;
    return stack;
  }
});

Object.defineProperty(global, '__line', {
  get: function(){
    return __stack[1].getLineNumber();
  }
});

console.log(__line);

以上将记录19

结合使用,arguments.callee.caller您可以更接近通过宏在C中获得的有用日志的类型。

2020-07-07