2011-07-18 132 views
2

我知道我可以通過使用Internet Explorer是否支持arguments.callee.name?

arguments.callee.caller.name 

獲得當前正在運行的函數的名稱,但這並不在Internet Explorer的 (任何版本)的工作。什麼是正確的跨瀏覽器語法?是否存在解決方法?

+2

你不能再這樣做了支持。它已被棄用。依靠這是糟糕的代碼。重構它 – Raynos

+0

有用的知識 - 謝謝雷諾斯! – mate64

+1

即使我後悔,雷諾斯是對的。 'arguments.callee'和'.caller'都被棄用。 ECMA委託人認爲,這些參考文獻造成的傷害遠遠超過了好處。任何支持「嚴格模式」的瀏覽器在使用這些屬性時都會引發異常。 – jAndy

回答

2

除了arguments.callee已被有效逐步淘汰,並且在ECMAScript 5嚴格模式下完全沒有的事實,主要問題是IE中的Function對象沒有name屬性。它在一些瀏覽器中實現,特別是Firefox和最近的基於WebKit的瀏覽器,但是不是標準的,並且確實沒有標準的方法來獲得函數名。

這個離開你的唯一選擇是試圖從函數的字符串表示中解析名字,這是不是一個好主意。這裏有一個很長的討論:http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/b85dfb2f2006c9f0

0

你可以試試這個:

arguments.callee.caller $名

在IE中使用$名稱

相關問題