जस्टिन फ़ागनानी ने बहुत ही साफ-सुथरे ( इहो ) तरीके का वर्णन किया है, जिसमें कई वर्गों को एक साथ इस तथ्य का उपयोग करने के लिए कहा गया है कि ES2015 में, कक्षाओं को कक्षा के भावों के साथ बनाया जा सकता है ।
अभिव्यक्तियाँ बनाम घोषणाएँ
असल में, जैसे आप एक अभिव्यक्ति के साथ एक समारोह बना सकते हैं:
function myFunction() {} // function declaration
var myFunction = function(){} // function expression
आप कक्षाओं के साथ भी ऐसा कर सकते हैं:
class MyClass {} // class declaration
var MyClass = class {} // class expression
अभिव्यक्ति का मूल्यांकन रनटाइम पर किया जाता है, जब कोड निष्पादित होता है, जबकि एक घोषणा पहले से निष्पादित होती है।
मिश्रण बनाने के लिए कक्षा के भावों का उपयोग करना
आप इसका उपयोग फ़ंक्शन को बनाने के लिए कर सकते हैं जो गतिशील रूप से केवल तब क्लास बनाता है जब फ़ंक्शन कहा जाता है:
function createClassExtending(superclass) {
return class AwesomeClass extends superclass {
// you class body here as usual
}
}
इसके बारे में अच्छी बात यह है कि आप पूरी कक्षा को पहले से परिभाषित कर सकते हैं और केवल यह तय कर सकते हैं कि किस समय तक आपको फ़ंक्शन को कॉल करना चाहिए।
class A {}
class B {}
var ExtendingA = createClassExtending(A)
var ExtendingB = createClassExtending(B)
यदि आप कई वर्गों को एक साथ मिलाना चाहते हैं, क्योंकि ES6 कक्षाएं केवल एकल वंशानुक्रम का समर्थन करती हैं, तो आपको उन कक्षाओं की एक श्रृंखला बनाने की आवश्यकता होती है, जिनमें उन सभी वर्गों को सम्मिलित करना होता है जिन्हें आप एक साथ मिलाना चाहते हैं। तो मान लें कि आप एक वर्ग C बनाना चाहते हैं जो A और B दोनों का विस्तार करता है, आप ऐसा कर सकते हैं:
class A {}
class B extends A {}
class C extends B {} // C extends both A and B
इसके साथ समस्या यह है कि यह बहुत स्थिर है। यदि आप बाद में निर्णय लेते हैं कि आप एक वर्ग डी बनाना चाहते हैं जो बी नहीं बल्कि ए का विस्तार करता है, तो आपको एक समस्या है।
लेकिन कुछ स्मार्ट प्रवंचना के साथ इस तथ्य का उपयोग करते हुए कि कक्षाएं अभिव्यक्ति हो सकती हैं, आप इसे ए और बी बनाकर सीधे कक्षाओं के रूप में हल कर सकते हैं, लेकिन कक्षा कारखानों के रूप में (संक्षिप्तता के लिए तीर फ़ंक्शन का उपयोग करके):
class Base {} // some base class to keep the arrow functions simple
var A = (superclass) => class A extends superclass
var B = (superclass) => class B extends superclass
var C = B(A(Base))
var D = B(Base)
ध्यान दें कि हम केवल अंतिम क्षण में कैसे तय करते हैं कि कौन सी कक्षाएं पदानुक्रम में शामिल हैं।