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.
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.