2014-04-07 38 views
0

所以說,獲取的函數名,我有功能Hello_world()的JavaScript - 通過函數

function Hello_world() { 
    b(); 
} 

我想創建功能b()其中b()返回調用它的函數的名稱。在這種情況下,我想b()返回"Hello_world"。如何構建b()?謝謝。

+1

不,你不想那樣。 [什麼問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)你想用這個解決嗎? – Bergi

+0

嘗試使用這個http://stackoverflow.com/questions/3178892/get-function-name-in-javascript –

+1

http://stackoverflow.com/questions/280389/how-do-you-find-out-the-調用者函數在javascript –

回答

4

你可以使用三種despiseddeprecatednon-standard屬性是:

function b() { 
    return arguments.callee.caller.name; 
} 

不要指望它在舊的瀏覽器,新的瀏覽器,嚴格模式,IE瀏覽器,工作...

+0

+1我沒有意識到它。如果它是非標準的,我們可以將方法名作爲參數傳遞給'b(theCallerName){return theCallerName''? – Praveen

+1

是的,你可以也應該,雖然它會讓'b()'多餘:-) – Bergi

+1

@ Praveen - 希望你能傳遞一個函數引用,而不僅僅是它的名字。 ;-) – RobG

0

有也是堆棧跟蹤的一個技巧,它也被鄙視(因爲它是高度依賴平臺的)並且難以說至少:

function getStackTrace() { return new Error().stack; } 

這將返回這樣的事情在Chrome的開發者控制檯:

"Error 
    at getStackTrace (<anonymous>:2:35) 
    at <anonymous>:2:1 
    at Object.InjectedScript._evaluateOn (<anonymous>:581:39) 
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:540:52) 
    at Object.InjectedScript.evaluate (<anonymous>:459:21)" 

和你reqular表情從那裏去。

將在Chrome中工作,對其他人不太確定,因此對於生產版本不利。不錯,雖然哈克:)