मैं वर्तमान में चल रहे फ़ंक्शन का नाम प्राप्त करने का प्रयास कर रहा हूं। , जब मैं फ़ायरफ़ॉक्स और सफारी में इस (नवीनतम संस्करण मैक पर) चलानेजावास्क्रिप्ट - arguments.callee.toString() और arguments.callee.name फ़ंक्शन का नाम वापस नहीं करता है
(arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/)
हालांकि नाम वापस नहीं किए गए: मैं क्या पढ़ा है से, यह संभव का उपयोग करते हुए होना चाहिए।
console.log (arguments.callee) फ़ंक्शन का स्रोत देता है, लेकिन निर्दिष्ट नाम नहीं। arguments.callee.name एक खाली स्ट्रिंग देता है।
मेरे नमूना कोड इस प्रकार है:
var testobj = {
testfunc: function(){
console.log((arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/));
}
}
testobj.testfunc();
मैं पूछ सकता हूँ, तुम क्यों चाहते हैं/यह करने के लिए की जरूरत है? – James
याहू। तो मैं फ़ंक्शन चेनिंग से युक्त एक पालतू परियोजना पर काम कर रहा हूं। मेरे पास लगभग 50 अलग-अलग फ़ंक्शन हैं जो सभी एक ही कोड चलाते हैं, सिवाय इसके कि उनमें एक विशेष चर को फ़ंक्शन के समान नाम के रूप में परिभाषित किया गया है। मैं सभी डुप्लिकेशंस को एक ऐसे फ़ंक्शन में कम करना चाहता हूं जो कॉलिंग फ़ंक्शन के नाम का पता लगाता है और उस नाम का उपयोग उस चर के रूप में करता है जो वर्तमान में हार्ड कोड है। इस विधि के साथ, मैं एक पंक्ति में मेरी कार्यों के सभी परिभाषित कर सकते हैं। – Geuis
'toString()' इस तरह के कार्यों जैसे कार्यों (उर्फ फ़ंक्शन "डिकंपिलेशन") में इसके वार हैं। देखें http://perfectionkills.com/those-tricky-functions/, http://perfectionkills.com/detecting-built-in-host-methods/, http://my.opera.com/hallvors/blog/show .dml/1665828 और http://my.opera.com/hallvors/blog/2007/07/07/prototype-findorstore-cononsidered-harmful –