2012-10-10 58 views
3

我正在尋找一個等效於PHP的__FUNCTION__在JavaScript中,讓我得到當前函數的名稱。例如:在JavaScript中是否有等價於PHP的__FUNCTION__?

function foo(){ 
    console.log(__FUNCTION__); // "foo" would be logged to the console 
} 

有沒有辦法在JavaScript做到這一點?要麼使用類似於__FUNCTION__的魔術變量或任何其他解決方法?而且,如果目前還沒有辦法達到這個目標,是否計劃

+5

解決方法可能是'arguments.callee.name' – Bergi

+0

@Bergi說的聽起來像是解決方案。由於['警告:ECMAScript的第5版禁止在嚴格模式下使用arguments.callee()]的限制[](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/callee) - 但我想這隻有在你的代碼選擇嚴格模式時纔有意義。 –

+0

另一個問題可能是你爲什麼需要知道函數的名字?根據作用域的不同,函數名可能會被註冊到窗口對象中,它可能會被封閉在一個閉包中......我只是好奇什麼用例會首先要求函數的名稱才能正確運行? (我意識到可能有**用例,我只是好奇,如果可能有另一種方式來處理你的問題,多一點背景知識。) –

回答

3

您可能會通過arguments objectcallee property獲得對當前正在執行的函數的引用。請注意,它在ES5.1嚴格模式下已棄用。 (非標準)name of the function。請注意,這僅適用於函數的聲明和named function expressions(與IE已知的漏洞),而不是匿名函數的對象屬性:

var myObj = { 
    method: function() { // unnamed! 
     return arguments.callee.name || "anonymous"; 
    } 
}; 
myObj.method(); // "anonymous" 

我爲自己使用的調試/錯誤陳述靜態字符串,在前面加上全函數的名稱空間可以輕鬆地在代碼中找到它。

相關問題