2012-02-23 10 views
6

のは、私が機能を持っているとしましょう:自体の内部から関数名を取得します

function test1() { 

     } 

私は自分自身の中から「TEST1」を返すようにしたいです。私はあなたがarguments.calleeを行うことができることを知っています。それは全体の関数を返し、そしていくつかの醜い正規表現を行います。もっと良い方法?

名前空間機能はどうですか?

は同様に彼らの名前を取得することが可能です: 例えば:

var test2 = 
{ 
foo: function() { 
    } 
}; 

私は自分自身の中から、この例のためのfooを返すようにしたいです。

update:(arguments.callee.name)Chromeは空白を返し、IE9は未定義を返します。スコープされた関数では機能しません。

+1

HTTP([javascript関数は、その名前を知っています]の可能DUP http://stackoverflow.com/questions/2648293/javascript-get-function-name – ajax333221

+0

が重複する可能性: //stackoverflow.com/questions/5599513/does-javascript-function-know-its-name)と[関数名をjavascriptで取得](http://stackoverflow.com/q/3178892/218196)を参照してください。 –

答えて

8
var test2 = { 
    foo: function() { 
    } 
}; 

機能に名前を付けていません。 test2fooプロパティを無名関数に割り当てます。

arguments.callee.nameは、関数がfunction foo(){}構文を使用して宣言されている場合にのみ機能します。

これは動作するはずです:

var test2 = { 
    foo: function foo() { 
     console.log(arguments.callee.name); // "foo" 
    } 
}; 
+4

'arguments.callee'と' arguments.caller'が推奨されなくなりました。 –

+1

関数が実行されるとき、関数が 'test2'に属していることを知らないことに注意してください。 (「属していない」ため、 'test2'は関数を参照する' foo'というプロパティを持ちます;同じ関数への他の参照を作成することができます。そのオブジェクトへの 'this'参照) – nnnnnn

+1

IE 8以降では失敗します。[名前付き関数式](http://kangax.github.com/nfe/)とその理由。 – RobG

関連する問題