在你的代碼的函數片斷,有沒有名字,它是匿名的。它分配給profile
的房產有一個名稱(edit
),但該功能沒有。不,沒有辦法從函數對象獲取edit
或profile.edit
或Cube.profile.edit
。
,您可以給函數名稱:
Cube : {
profile: {
edit : function edit(){
alert(arguments.callee.name);
}
}
}
...那是用命名的函數表達式這將創造two separate function objects在IE8和更早版本。您正在使用arguments.callee
這既是對很多瀏覽器的速度很慢
:
你也可以這樣做:
Cube : {
profile: {
edit : Cube_profile_edit
}
}
// ...
function Cube_profile_edit(){
alert(arguments.callee.name);
}
然而,在所有的上述兩個問題,並且在strict mode中無效。
函數對象的name
屬性是非標準的,這就是爲什麼關於可能不必解析的Function#toString
結果this answer會談。問題是,Function#toString
是也非標準(但相當廣泛的支持,除了在移動瀏覽器)。
你可能避免第二個問題,通過爲是指功能屬性的Cube
對象圖搜索,但仍然需要使用arguments.callee
(除非你給功能的真實姓名,然後用真正的名稱搜索時找到導致它的屬性路徑)。
你可以給你的函數命名:'edit:function edit(){...}' – elclanrs
@Osiris我會經歷這個問題。但我沒有得到我的答案。 'alert(arguments.callee.name);'不適用於上面的代碼示例。 –
@elclanrs:在IE8及更早版本上創建了[兩個函數](http://blog.niftysnippets.org/2010/09/double-take.html)。 –