65

Cのような言語で時間を過ごしたJavaScript開発者は、行番号の記録や現在のメソッドが呼び出されたメソッドなど、特定のタイプのイントロスペクションを使用する機能を見逃すことがよくあります。V8(Chrome、Node.js)を使用している場合は、次の方法を使用できます。

4

2 に答える 2

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

于 2012-07-08T20:35:35.367 に答える