चूंकि आपका मुद्दा ज्यादातर शैलीगत है (घोषणाओं के एक समूह के साथ कंस्ट्रक्टर को भरना नहीं चाहता है) यह स्टाइलिस्टिक रूप से भी हल किया जा सकता है।
जिस तरह से मैं इसे देखता हूं, कई वर्ग आधारित भाषाओं में कंस्ट्रक्टर एक फ़ंक्शन होता है जिसे क्लास नाम के नाम पर रखा जाता है। Stylistically हम इसका उपयोग कर सकते हैं कि ES6 वर्ग बनाने के लिए जो स्टाइलिस्टिक रूप से अभी भी समझ में आता है, लेकिन निर्माणकर्ता में होने वाले विशिष्ट कार्यों को उन सभी संपत्ति घोषणाओं के साथ समूहित नहीं करता है जो हम कर रहे हैं। हम केवल वास्तविक जेएस कंस्ट्रक्टर को "घोषणा क्षेत्र" के रूप में उपयोग करते हैं, फिर एक क्लास फंक्शन बनाते हैं जिसे हम अन्यथा "अन्य कंस्ट्रक्टर स्टफ" क्षेत्र के रूप में मानते हैं, इसे सच्चे कंस्ट्रक्टर के अंत में कहते हैं।
"सख्त का उपयोग करें";
वर्ग MyClass
{
// केवल अपने गुणों की घोषणा करें और फिर इसे कॉल करें। ClassName (); यहां से
निर्माता () {
this.prop1 = 'blah 1';
this.prop2 = 'blah 2';
this.prop3 = 'blah 3';
this.MyClass ();
}
// सभी प्रकार के अन्य "कंस्ट्रक्टर" सामान, अब घोषणाओं के साथ उछला नहीं
मेरी कक्षा() {
कुछ भी करें();
}
}
दोनों का निर्माण नई आवृत्ति के रूप में किया जाएगा।
2 कंस्ट्रक्टर जैसे कि आप घोषणाओं को अलग करते हैं और अन्य रचनाकार एक्शन जिन्हें आप लेना चाहते हैं, और शैलीगत रूप से यह समझना बहुत मुश्किल नहीं है कि क्या चल रहा है।
मुझे पता है कि बहुत सी घोषणाओं और / या तात्कालिकता पर होने वाली बहुत सी क्रियाओं और दो विचारों को एक दूसरे से अलग रखने के लिए उपयोग करने के लिए उपयोग करने के लिए यह एक अच्छी शैली है।
ध्यान दें : मैं बहुत उद्देश्यपूर्ण "इनिशियलाइज़िंग" ( init()
या एक initialize()
विधि की तरह ) के विशिष्ट मुहावरेदार विचारों का उपयोग नहीं करता क्योंकि वे अक्सर अलग तरह से उपयोग किए जाते हैं। निर्माण और आरंभ के विचार के बीच एक प्रकार का अनुमान है। कंस्ट्रक्टर के साथ काम करने वाले लोगों को पता है कि वे स्वचालित रूप से तात्कालिकता के हिस्से के रूप में कहे जाते हैं। एक init
विधि को देखकर बहुत से लोग दूसरी नज़र के बिना यह मानने वाले हैं कि उन्हें कुछ ऐसा करने की आवश्यकता है var mc = MyClass(); mc.init();
, क्योंकि यह है कि आप आमतौर पर किस तरह का उपयोग करते हैं। मैं वर्ग के उपयोगकर्ता के लिए एक आरंभीकरण प्रक्रिया जोड़ने की कोशिश कर नहीं कर रहा हूँ, मैं जोड़ने के लिए कोशिश कर रहा हूँ करने के लिए वर्ग के ही निर्माण की प्रक्रिया।
हालांकि कुछ लोग एक पल के लिए डबल-टेक कर सकते हैं, यह वास्तव में बिंदु का हिस्सा होता है: यह उन्हें सूचित करता है कि इरादे निर्माण का हिस्सा है, भले ही यह उन्हें थोड़ा सा लेने और जाने के लिए "नहीं है" ईएस 6 कंस्ट्रक्टर कैसे काम करते हैं "और वास्तविक कंस्ट्रक्टर को देखने के लिए एक दूसरे को देखते हैं" ओह, वे इसे नीचे कहते हैं, मैं देखता हूं ", यह उस इरादे (या गलत तरीके से इसे संप्रेषित करने) से बेहतर नहीं है और शायद बहुत अधिक हो रहा है लोग इसका गलत उपयोग करते हैं, इसे बाहर और कबाड़ से शुरू करने की कोशिश कर रहे हैं। मेरे द्वारा सुझाए गए पैटर्न के लिए यह बहुत ही जानबूझकर है।
जो लोग उस पैटर्न का पालन नहीं करना चाहते हैं, उनके लिए सटीक विपरीत भी काम कर सकता है। शुरुआत में एक और समारोह के लिए घोषणाओं को खेत। शायद इसे "गुण" या "publicProperties" या कुछ और नाम दें। फिर बाकी सामान को सामान्य कंस्ट्रक्टर में डालें।
"सख्त का उपयोग करें";
वर्ग MyClass
{
गुण() {
this.prop1 = 'blah 1';
this.prop2 = 'blah 2';
this.prop3 = 'blah 3';
}
कंस्ट्रक्टर () {
this.properties ();
कुछ भी करें();
}
}
ध्यान दें कि यह दूसरी विधि क्लीनर लग सकती है, लेकिन इसमें एक अंतर्निहित समस्या भी है, जहां properties
इस पद्धति का उपयोग करने वाले एक वर्ग के रूप में ओवरराइड हो जाता है। इससे properties
बचने के लिए आपको अधिक विशिष्ट नाम देने होंगे । मेरी पहली विधि में यह समस्या नहीं है क्योंकि इसके निर्माता का फर्जी आधा वर्ग के नाम पर विशिष्ट है।
this.member = member
20-30 मापदंडों के साथ अपने निर्माता पर दोहराव होगा ?