2011-03-21 71 views
2

在JavaScript中,我可以使用foo.caller來獲取堆棧跟蹤中foo上方函數的引用。但是,當函數在同一個堆棧跟蹤中出現多次時,這不起作用,foo.caller只是返回foo。在遞歸代碼中使用Javascript function.caller的堆棧跟蹤?

是否存在穩定的跨平臺方法在Javascript中獲取完整堆棧跟蹤?我不要想要得到一個可打印的堆棧跟蹤;相反,我正在進行堆棧檢查,以查看某個方法是否位於堆棧中的任何位置。這是我現在的代碼:

function inFunction(foo) { 
    var caller = inFunction.caller; 
    var maxDepth = 20; 
    while(caller && --maxDepth > 0) { 
     if(caller == foo) 
      return true; 
     caller = caller.caller; 
    } 
    return false; 
} 

任何想法如何處理堆棧跟蹤中存在多次函數?

+0

您是否檢出http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript/235760#235760 – ken 2011-03-21 21:29:59

+0

快速參考:https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller – oneamongu 2014-01-21 17:18:37

回答

5

對不起,但沒有。一旦你在跟蹤中發現遞歸函數,就不可能進入調用函數。

我花了好幾天的時間想出瞭解決這個問題的方法,同時爲Sun Microsystems編寫了JavaScript的JavaScript代碼。沒有了。