2010-01-29 17 views
19

फ़ंक्शन का नाम सीखना कैसे संभव है?मैं जावास्क्रिप्ट फ़ंक्शन के अंदर फ़ंक्शन का नाम कैसे प्राप्त कर सकता हूं?

नीचे कोड अलर्ट 'ऑब्जेक्ट'। लेकिन मुझे यह जानने की जरूरत है कि "बाहरी" कैसे चेतावनी दी जाए।

function Outer(){ 

    alert(typeof this); 

} 
+0

मैं उत्सुक हूँ, किस परिस्थिति में होगा समारोह आप में है, उसके नाम से एक कोड में लिखा नहीं वास्तव में? – bryantsai

+0

@bryantsai: 'window [window.prompt ('फंक्शन नाम:', '')] = 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' को बहिष्कृत किया गया है, लेकिन चूंकि ईसीएमए ने अभी तक किसी भी विकल्प को परिभाषित नहीं किया है, इसलिए यह तरीका है। – Boldewyn

+0

@ बोल्डविन: अधिक खोज के बाद मैंने उसे भी देखा। लेकिन जब इसे हटा दिया गया है, यह अभी भी अधिकांश ब्राउज़रों में काम करता है। और जैसा कि आपने कहा था, कोई विकल्प नहीं है sooooo ... ^^ – marcgg

+1

@ बोल्डविन, 'arguments.callee' सिर्फ बहिष्कृत नहीं है। जब सख्त मोड सक्षम होता है, तो इसे एक्सेस करने से TypeError का कारण बनता है। – bryantsai

15

यह काम करेगा:

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

यह चयनित उत्तर के बजाय सही उत्तर है। –

संबंधित मुद्दे

 संबंधित मुद्दे