花时间学习C等语言的JavaScript开发人员往往无法使用某些类型的自省,比如记录行号,以及当前方法的调用方法.如果您使用的是V8(Chrome,Node.js),那么您可以采用以下方法.
花时间学习C等语言的JavaScript开发人员往往无法使用某些类型的自省,比如记录行号,以及当前方法的调用方法.如果您使用的是V8(Chrome,Node.js),那么您可以采用以下方法.
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中通过宏获得的有用日志(log)类型.