2010-01-29 15 views
19

İçinde bulunduğum işlevin adını öğrenmek nasıl mümkün olabilir?Fonksiyonun adını nasıl bir JavaScript fonksiyonunun içine alabilirim?

Aşağıdaki kod 'Nesne'yi uyarır. Ama "Dış" u nasıl uyarılacağını bilmem gerek.

function Outer(){ 

    alert(typeof this); 

} 
+0

merak ediyorum, hangi koşullarda olur mu konum fonksiyonun adı aslında kodunda dışarı yazılı olan mı? – bryantsai

+0

@bryantsai: 'window [window.prompt ('İşlev adı:', '')] = function() {alert (arguments.callee.name); }; ' – Boldewyn

cevap

16

ben bunu yapabilir düşünüyorum:

var name = arguments.callee.toString(); 

Bu konuda daha fazla bilgi için, this article bakabilirsiniz.

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

ne yazık ki 'arguments.callee' kullanımdan kaldırılmıştır, ancak ECMA henüz bir yedek tanımlamamış olduğundan, işte bu yoldur. – Boldewyn

+0

@boldewyn: Daha fazla aramadan sonra onu da gördüm. Ancak, kullanımdan kaldırılmış olsa da, çoğu tarayıcıda hala çalışıyor. Ve söylediğin gibi, sooooo hiçbir alternatif yok ... ^^ – marcgg

+1

@Boldewyn, 'arguments.callee' sadece kullanımdan kaldırılmamıştır. Sıkı mod etkinleştirildiğinde, buna erişilmesi TypeError'a neden olur. – bryantsai

15

Bu çalışacaktır:

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

Bu, seçilen cevap yerine doğru cevaptır. –

İlgili konular