2011-09-16 14 views
5

ExtJS'nin 1433 hattında bir yeri kıran bir fonksiyon var.Fonksiyonun kapsamı aranıyor

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); 
    }; 
}; 

Bir işlevden hangi satırın yürütüleceğini kendi içinden görmenin bir yolu var mı?

(bir üçüncü taraf lib, ve ben gerçekten cant

var me =this; 

yapmak ve me log beri)

+3

Kundakçı. Kesme noktası. Yığın izleme. Hepsi bu. –

+0

Bazı eğlence nedeni için firebug bana bir yığın izini vermekle ilgilenmiyordu. – Alex

+0

Fikrini değiştir! –

cevap

10

bunu erişmek hangi işlevi çağıran işlevin eder, hangi arguments.callee.caller yoktur özelliği. arguments.callee işlevi kendisidir.

Özgün işlevin kapsamını geçmeden almanın bir yolu yoktur. Aşağıdaki örnekte, (özel bir şey oluyor burada this ile orada bilerek dışında) foo içindeki this değerini belirlemek olamaz:

function foo() { 
    bar(); 
} 

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

foo(); 

Documentation


satır numarası şeyler almak için yanıltıcıdır olur ancak bir hata atabilir ve yığın izine bakabilirsiniz: http://jsfiddle.net/pimvdb/6C47r/. Turp için

function foo() { 
    bar(); 
} 

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

foo(); 

, bu yolun sonu diyor Chrome, aşağıdakine benzer bir şey kaydeder satır numarası ve karakter pozisyonu:

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