我有一個名爲getItem的函數。我想用它內部的代碼讀取這個函數的名字。這可能嗎?javascript函數是否知道它的名字
function getItem(){
var functionName = //how do I read the function name;
alert(functionName) //outputs 'getItem'
}
我有一個名爲getItem的函數。我想用它內部的代碼讀取這個函數的名字。這可能嗎?javascript函數是否知道它的名字
function getItem(){
var functionName = //how do I read the function name;
alert(functionName) //outputs 'getItem'
}
試試這個:
function getItem(){
var functionName = arguments.callee.name;
alert(functionName) //outputs 'getItem'
}
這裏是小提琴:http://jsfiddle.net/maniator/xGzKA/
也看到這個previous stack Q另一種解決方案
arguments.callee在嚴格的JS中被棄用,就像一個注意事項。 – 2011-04-08 18:55:55
在IE8中不起作用,警告'未定義' – 2011-04-08 19:03:14
@Shadow Wizard,在IE中你必須使用另一個堆棧Q – Neal 2011-04-08 19:04:01
試試這個,
function getItem(){
var functionName = arguments.callee.name;
alert(functionName);
}
雖然你可能不應該使用這個,你可以對IE,火狐,Chrome,Safari和Opera做到這一點(我承認arguments.callee
方便儘管有效保留意見吧,如果該功能將arguments.callee.name
.name屬性是標準的):
function getFuncName (fn) {
var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
return name ? name[1] : '(Anonymous)';
}
誰說一個函數甚至必須有一個名字?畢竟,javascript對非命名函數有很大的支持。 – 2011-04-08 18:51:24
@Joel Coehoorn,我知道你的意思,但是這個功能有一個名字,因爲我確保給它一個。有沒有辦法從函數內部獲取該名稱? – jarn 2011-04-08 18:52:49
你想解決什麼問題?你在編寫測試框架並將這些代碼注入其他函數嗎?可能有辦法解決您的問題,而不需要函數的名稱。 – 2011-04-08 18:56:55