2011-09-16 18 views
5

私は、ExtJSの1433行のどこかで壊れてしまう関数を持っています。関数呼び出しのスコープを取得する

var createDelayed = function(h, o, scope){ 
console.log(arguments); //logs undefined all round. 
    return function(){ 
     var args = Array.prototype.slice.call(arguments, 0); 
     setTimeout(function(){ 
      h.apply(scope, args); 
     }, o.delay || 10); 
    }; 
}; 

関数自体が実行された行を確認する方法はありますか?

(これは、サードパーティのlibにだ、と私は本当にカント

var me =this; 

を行うとmeをログに記録するので)

+3

Firebugの。ブレークポイント。スタックトレース。それだけです。 –

+0

いくつかの楽しい理由のために、firebugは私にスタックトレースを与えることに興味がありませんでした。 – Alex

+0

気が変わる! –

答えて

10

あなたがいることをアクセスする機能を呼び出した関数を指し、arguments.callee.callerありプロパティ。 arguments.calleeは関数そのものです。

元の関数のスコープを渡すことはできません。次の例では、(何も特別な出来事がここthisであり知っているから離れて)foo内部this値を決定することはできません。

function foo() { 
    bar(); 
} 

function bar() { 
    console.log(arguments.callee);  // bar function 
    console.log(arguments.callee.caller); // foo function 
} 

foo(); 

Documentation


は、行番号のものを取得するにはトリッキーになりしかし、エラーをスローしてスタックトレースを見ることができます:http://jsfiddle.net/pimvdb/6C47r/。フィドルのために

function foo() { 
    bar(); 
} 

function bar() { 
    try { throw new Error; } 
    catch(e) { 
     console.log(e.stack); 
    } 
} 

foo(); 

は、それが行の最後が言うクロム、に次のような何かをログに記録する行番号と文字位置:

Error 
    at bar (http://fiddle.jshell.net/pimvdb/6C47r/show/:23:17) 
    at foo (http://fiddle.jshell.net/pimvdb/6C47r/show/:19:5) 
    at http://fiddle.jshell.net/pimvdb/6C47r/show/:29:1 
関連する問題