ecmascript 5 - How to get name of JavaScript Class -


चलो निम्नलिखित उदाहरण कोड लेते हैं:

  var ns = {}; // कुछ नाम स्थान ns.Test = function () {// कक्षा परीक्षण के कन्स्ट्रक्टर}; Var inst = new ns.Test (); Var क्लासनाम = यहां इत्यादिमाजिक (इंस्टा); // "ns.Test"   

वापस आना चाहिए तो मैं नामस्थान 'एनएस' में 'टेस्ट' नामक एक वर्ग बना रहा हूं और 'inst' नामक इस वर्ग की एक घटना है। अब मैं कक्षा का नाम खोजना चाहता हूं। मैं यह कैसे कर सकता हूँ?

अब तक मैंने प्रत्येक वर्ग को वर्ग नाम के साथ एक स्ट्रिंग संपत्ति देकर इस समस्या का हल किया है ताकि मैं वर्ग नाम तक पहुंचने के लिए inst.constructor.className का उपयोग कर सकूं। लेकिन यदि संभव हो तो मैं ऐसा करना बंद करना चाहूंगा क्योंकि यह कॉपी / चिपकाने वाले वर्गों में त्रुटिपूर्ण प्रवण होता है।

अगर कोई भी समाधान नहीं है जो सभी मौजूदा ब्राउज़रों में काम करता है तो संभवतः इसमें कुछ नई सुविधा हो सकती है कुछ भविष्य के ECMAScript युक्ति जो वर्ग के नामों तक पहुंच प्रदान करता है?

जावास्क्रिप्ट में वर्ग नहीं है, Em> कन्स्ट्रक्टर फ़ंक्शन और प्रोटोटाइप श्रृंखला साथ में, वे कक्षाओं की तरह थोड़ा देख सकते हैं, लेकिन वे वास्तव में नहीं हैं। : -)

नहीं, कोई मानक तरीका नहीं है कि यहाँ इज़मॅजिक आपके उदाहरण में स्ट्रिंग "एनएस। टेस्ट" पा सकते हैं, यहां तक ​​कि ईसीएमएस्क्रिप्ट 5 में भी नहीं। एक बात के लिए, Ns.Test हो सकता है कि उस कार्य का संदर्भ केवल एकमात्र संपत्ति न हो (यदि आपने ns.OtherTest = ns.Test; जोड़ा, उदाहरण के लिए)।

जावास्क्रिप्ट में उचित नाम वाले फ़ंक्शंस की अवधारणा है, लेकिन फ़ंक्शन के उचित नाम तक पहुंचने का कोई मानक तरीका नहीं है, और यहां तक ​​कि अगर आप यह कर सकते हैं, तो फ़ंक्शन जिसे आप कॉल कर रहे हैं ns.Test है अनाम यह संपत्ति जिसे आप इसे ns पर रखी है उसका नाम ( टेस्ट ) है, लेकिन फ़ंक्शन नहीं है।

आप फ़ंक्शन को नाम:

  var ns = {}; // कुछ नाम स्थान (फ़ंक्शन () {ns.Test = ns_Test; फ़ंक्शन ns_Test () {// कक्षा परीक्षण के कन्स्ट्रक्टर}}) ();   

... जो एक अच्छा विचार है, क्योंकि यह है, लेकिन जावास्क्रिप्ट कोड के लिए कोई मानक तरीका नहीं है, उस नाम पर जाना है। ( ns.Test = function ns_Test () मत करो {}} ... , हालांकि, यह काम करना चाहिए, लेकिन ECMAScript के विभिन्न कार्यान्वयन हैं जो इसके संबंधित विभिन्न बग हैं। उस अंदर।)


अपडेट : मुझे शायद ये कहना चाहिए था: गैर - उचित नाम प्राप्त करने के लिए मानक तरीके हैं फ़ंक्शन ( ns_Test मेरे ऊपर दिए गए उदाहरण में)।

इनमें से सबसे आसान काम के उदाहरणों पर नाम संपत्ति है, जो द्वारा समर्थित है

  • ओपेरा का इंजन (मुझे इसके नाम का पता नहीं है)
  • फ़ायरफ़ॉक्स का स्पाइडरमॉकी
  • क्रोम के वी 8
  • >
  • सफारी के इंजन (सफारी मोबाइल सहित)

    ... इसलिए सतर्क (ns_Test.name); "ns_Test" चेतावनी देगा लेकिन यह गैर - मानक है और जेस्क्रिप्ट (माइक्रोसॉफ्ट के इंजन) के किसी संस्करण के द्वारा समर्थित नहीं है, यहां तक ​​कि IE9 द्वारा उपयोग किए गए संस्करण (अब अंततः जारी!)। यहाँ एक त्वरित परीक्षक पृष्ठ है:

    ध्यान दें, फिर से यह फ़ंक्शन का उचित नाम है (ऊपर मेरा उदाहरण देखें), उस संपत्ति का नाम नहीं जिसे आपने इसे सौंपा है।

    यदि नाम वहां नहीं है, तो आप फ़ंक्शन ऑब्जेक्ट पर toString () का उपयोग कर सकते हैं, जो हो सकता है (या नहीं) एक स्ट्रिंग वापस कर सकता है फ़ंक्शन का प्रतिनिधित्व (जैसे, "फ़ंक्शन ns_Test () {...}")। यह पूरी तरह से गैर मानक है, लेकिन डेस्कटॉप ब्राउज़र पर सामान्य है; यह कई मोबाइल ब्राउज़र पर काम नहीं करता है, और शायद किसी भी मामले में एक बुरा विचार है। : -)

  • Comments