जैसा कि @ डॉमिक कहते हैं, उपयोग करें someClassInstance.constructor.name
। @Esteban ने टिप्पणियों में उल्लेख किया है कि
someClassInstance.constructor
एक समारोह है। सभी कार्यों में एक name
संपत्ति है ...
इस प्रकार, वर्ग नाम को सांख्यिकीय रूप से एक्सेस करने के लिए, निम्नलिखित करें (यह मेरे बबल संस्करण BTW के साथ काम करता है। @Domenic पर टिप्पणियों के अनुसार आपका माइलेज भिन्न हो सकता है)।
class SomeClass {
constructor() {}
}
var someClassInstance = new SomeClass();
someClassInstance.constructor.name; // === 'SomeClass'
SomeClass.name // === 'SomeClass'
अपडेट करें
बैबल ठीक था, लेकिन बदसूरत / मिनिफिकेशन ने मुझे परेशान किया। मैं एक खेल बना रहा हूं, और पूलित स्प्राइट संसाधनों का एक हैश बना रहा हूं (जहां कुंजी फ़ंक्शन का नाम है)। लघुकरण के बाद, प्रत्येक फ़ंक्शन / वर्ग का नाम दिया गया था t
। यह हैश को मारता है। मैं Gulp
इस परियोजना में उपयोग कर रहा हूं , और मैंने जो gulp-uglify डॉक्स पढ़े उसके बाद इस स्थानीय चर / फ़ंक्शन नाम को होने से रोकने के लिए एक पैरामीटर है। तो, मेरे gulpfile में मैं बदल गया
.pipe($.uglify())
सेवा .pipe($.uglify({ mangle: false }))
यहां प्रदर्शन बनाम पठनीयता का व्यापार बंद है। नामों को प्रबंधित न करने से (थोड़ी) बड़ी बिल्ड फ़ाइल (अधिक नेटवर्क संसाधन) और संभावित धीमी कोड निष्पादन (आवश्यक उद्धरण - बीएस हो सकता है) हो जाएगा। दूसरी ओर, अगर मैंने इसे वही रखा तो मुझे getClassName
प्रत्येक ES6 वर्ग पर मैन्युअल रूप से परिभाषित करना होगा - एक स्थिर और उदाहरण के स्तर पर। जी नहीं, धन्यवाद!
अपडेट करें
टिप्पणियों में चर्चा के बाद, ऐसा लगता है कि .name
उन कार्यों को परिभाषित करने के पक्ष में सम्मेलन को टालना एक अच्छा प्रतिमान है। यह केवल कोड की कुछ पंक्तियां लेता है, और आपके कोड की पूर्णता और सामान्यता (यदि किसी पुस्तकालय में उपयोग की जाती है) की अनुमति देगा। इसलिए मुझे लगता है कि मैं अपना दिमाग बदल देता हूं और मैन्युअल रूप से getClassName
अपनी कक्षाओं में परिभाषित करूंगा। शुक्रिया @estus! । गेट्टर / सेटर्स आमतौर पर डायरेक्ट वैरिएबल एक्सेस वैसे भी, खासकर क्लाइंट आधारित एप्लिकेशन की तुलना में एक अच्छा विचार है।
class SomeClass {
constructor() {}
static getClassName(){ return 'SomeClass'; }
getClassName(){ return SomeClass.getClassName(); }
}
var someClassInstance = new SomeClass();
someClassInstance.constructor.getClassName(); // === 'SomeClass' (static fn)
someClassInstance.getClassName(); // === 'SomeClass' (instance fn)
SomeClass.getClassName() // === 'SomeClass' (static fn)
instance.constructor.name
औरclass.name
उचित ईएस 6 में वर्ग का नाम वापस करें।