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で得られる便利なロギングのタイプに近づけることができます。