2010-01-29 3 views
19

Как можно узнать имя функции, в которой я работаю?Как я могу получить имя функции внутри функции JavaScript?

Приведенные ниже предупреждающие сообщения «Объект». Но мне нужно знать, как предупредить «Наружный».

function Outer(){ 

    alert(typeof this); 

} 
+0

мне очень интересно, при каких обстоятельствах имя функции, которую вы находитесь в самом деле не один выписана в коде? – bryantsai

+0

@bryantsai: 'window [window.prompt ('Function name:', '')] = function() {alert (arguments.callee.name); }; ' – Boldewyn

ответ

16

Я думаю, что вы можете сделать это:

var name = arguments.callee.toString(); 

Для получения дополнительной информации об этом, посмотрите на this article.

function callTaker(a,b,c,d,e){ 
    // arguments properties 
    console.log(arguments); 
    console.log(arguments.length); 
    console.log(arguments.callee); 
    console.log(arguments[1]); 
    // Function properties 
console.log(callTaker.length); 
    console.log(callTaker.caller); 
    console.log(arguments.callee.caller); 
    console.log(arguments.callee.caller.caller); 
    console.log(callTaker.name); 
    console.log(callTaker.constructor); 
} 

function callMaker(){ 
    callTaker("foo","bar",this,document); 
} 

function init(){ 
    callMaker(); 
} 
+2

, к сожалению,' arguments.callee' устарел, но поскольку ECMA еще не определила какой-либо замены, это путь. – Boldewyn

+0

@ boldewyn: после большего поиска я тоже видел это. Но пока он устарел, он по-прежнему работает в большинстве браузеров. И, как вы сказали, нет альтернативы sooooo ... ^^ – marcgg

+1

@Boldewyn, 'arguments.callee' не просто устарели. Когда строгий режим включен, доступ к нему вызовет TypeError. – bryantsai

15

Это будет работать:

function test() { 
    var z = arguments.callee.name; 
    console.log(z); 
} 
+1

Это правильный ответ, а не выбранный ответ. –

Смежные вопросы