का उपयोग कर मौजूदा समारोह के लिए एक संदर्भ प्राप्त कर सकते हैं वर्तमान फ़ंक्शन का संदर्भ प्राप्त करने के लिए arguments.callee का उपयोग करें।
मैं फ़ंक्शन का नाम प्राप्त करना चाहता हूं, यह थोड़ा सा चालक है: सभी कार्यों को विधि बंद करने के रूप में माना जाता है (कोड के टुकड़े जिन्हें एक तर्क के रूप में पारित किया जा सकता है), इसलिए उनके पास एक संलग्नक का संदर्भ नहीं है कक्षा का प्रकार, न ही उनके पास "वर्तमान नाम" है।
हालांकि, अगर (और केवल अगर) विधि सार्वजनिक है, और आप विधि युक्त एक उदाहरण वस्तु के वर्ग घोषणा से विधि नाम प्राप्त करना चाहते हैं, तो आप describeType उपयोग कर सकते हैं:
public function someFunction() : void {
var callee:Function = arguments.callee;
trace (getFunctionName(callee, this)); // ==> someFunction
}
private function someOtherFunction() : void {
var callee:Function = arguments.callee;
trace (getFunctionName(callee, this)); // ==> not found
}
private function getFunctionName (callee:Function, parent:Object):String {
for each (var m:XML in describeType(parent)..method) {
if (parent[[email protected]] == callee) return [email protected];
}
return "not found";
}
ध्यान दें कि जब आप किसी निर्माता से someFunction()
पर कॉल करते हैं तो यह काम नहीं करेगा, क्योंकि ऑब्जेक्ट पूरी तरह से तत्काल नहीं है - describeType(this)
किसी कन्स्ट्रक्टर में संकलन त्रुटि का कारण बनता है।
त्वरित नोट: यदि आप इसे किसी अन्य वर्ग से उपयोग करने में सक्षम होना चाहते हैं, तो आपको 'parent [m। @ Name]' –
के साथ 'यह [m। @ Name] 'को प्रतिस्थापित करना होगा जो वास्तव में एक बग था। इसे मेरे ध्यान में लाने के लिए धन्यवाद, @ क्रिसवेल्श – weltraumpirat