Gli sviluppatori JavaScript che hanno trascorso del tempo in linguaggi come C spesso non riescono a utilizzare determinati tipi di introspezione, come i numeri di riga di registrazione e il metodo con cui è stato richiamato il metodo corrente a partire dal. Bene, se usi V8 (Chrome, Node.js) puoi utilizzare quanto segue.Accesso al numero di riga in V8 JavaScript (Chrome & Node.js)
46
A
risposta
77
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);
Quanto sopra registrerà 19
.
In combinazione con arguments.callee.caller
è possibile avvicinarsi al tipo di registrazione utile che si ottiene in C tramite macro.
-2
a quanto pare questo funziona anche nel nodo o browser Chrome (possibilmente altri pure)
line = (o) ->
b = Error.prepareStackTrace
Error.prepareStackTrace = (_, stack) -> stack
e = new Error
Error.captureStackTrace e, o
s = e.stack
Error.prepareStackTrace = b
s[1].getLineNumber()
console.log line this
o:
lineNumber=(o)->E=Error;p='prepareStackTrace';b=E[p];E[p]=((_,s)->s);e=new E;E.captureStackTrace e,o;s=e.stack;E[p]=b;s[1].getLineNumber()
console.log lineNumber this
+1
Funziona con V8 (usato da Chrome e Node.js) come menzionato nel titolo del mio post. –
+8
Mike, penso che l'OP stia parlando di JavaScript –
https://code.google.com/p/v8/wiki/ JavaScriptStackTraceApi # Customizing_stack_traces ha un elenco di altri metodi disponibili nell'API StackTrace v8. Un elenco generale: getThis, getTypeName, getFunction, getFunctionName, getMethodName, getFileName, getLineNumber, getColumnNumber, getEvalOrigin, isToplevel, isEval, isNative, isConstructor – zamnuts
Vedere anche questa risposta per alcuni esempi di codice per generare l'intera traccia. http://stackoverflow.com/questions/6163807/customized-stack-traces-in-google-chrome-developer-tools/10942404#10942404 –
Si può vedere qualche esempio di utilizzo di questa API qui: https://github.com /jameswomack/capn/blob/master/test/capn.js –