在诸如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。
19
结合使用,arguments.callee.caller您可以更接近通过宏在C中获得的有用日志的类型。
arguments.callee.caller