web-dev-qa-db-fra.com

Accès au numéro de ligne en JavaScript V8 (Chrome & Node.js)

Les développeurs JavaScript qui ont passé du temps dans des langages comme C manquent souvent la possibilité d'utiliser certains types d'introspection, comme la journalisation des numéros de ligne, et de quelle méthode la méthode actuelle a été invoquée. Eh bien, si vous utilisez V8 (Chrome, Node.js), vous pouvez utiliser les éléments suivants.

58
james_womack
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);

Ce qui précède enregistrera 19.

Combiné avec arguments.callee.caller vous pouvez vous rapprocher du type de journalisation utile que vous obtenez dans C via des macros.

91
james_womack