ईएस6 में, क्लासेस कंस्ट्रक्टर कार्यों के लिए सिंटैक्टिक शुगर हैं। जब किसी क्लास को नए कीवर्ड के बिना लागू किया जाता है, तो यह क्लास का एक नया उदाहरण नहीं बनाता है। इसके बजाय, यह सीधे क्लास के कंस्ट्रक्टर फ़ंक्शन को कॉल करता है।
निम्नलिखित क्लास पर विचार करें:
class Foo {
constructor(x) {
if (!(this instanceof Foo)) return new Foo(x);
this.x = x;
}
hello() {
return `hello ${this.x}`;
}
}
यदि हम नए कीवर्ड के बिना इस क्लास को कॉल करने का प्रयास करते हैं, तो हमें एक त्रुटि मिलती है:
Cannot call a class as a function
ऐसा इसलिए है क्योंकि क्लास कंस्ट्रक्टर डिज़ाइन किए गए हैं कक्षा के नए उदाहरण बनाने के लिए। नए ऑपरेटर के बिना उन्हें इनवॉइस करना एक नियमित फ़ंक्शन को कॉल करने के बराबर है।
नए कीवर्ड के बिना क्लास कंस्ट्रक्टर को कॉल करने की अनुमति देने के लिए, हम एक कंस्ट्रक्टर फ़ंक्शन और एक एरो फ़ंक्शन के संयोजन का उपयोग निम्नानुसार कर सकते हैं:
class Foo {
constructor(x) {
if (!(this instanceof Foo)) return new Foo(x);
this.x = x;
}
hello() {
return `hello ${this.x}`;
}
}
const FooWithoutNew = () => new Foo(...arguments);
अब, हम FooWithoutNew:FooWithoutNew("world") का उपयोग करके नए कीवर्ड के बिना क्लास कंस्ट्रक्टर को कॉल कर सकते हैं। नमस्ते(); // "हैलो वर्ल्ड"FooWithoutNew("world").hello(); // "hello world"हालांकि, यह ध्यान रखना महत्वपूर्ण है कि इस दृष्टिकोण में कुछ कमियां हैं। सबसे पहले, इसके लिए एक अलग फ़ंक्शन बनाने की आवश्यकता होती है, जो असुविधाजनक हो सकता है। दूसरा, यह एक नया उदाहरण लौटाने के कंस्ट्रक्टर के व्यवहार को तोड़ देता है।सामान्य तौर पर, स्पष्टता और स्थिरता के लिए क्लास कंस्ट्रक्टर को हमेशा नए कीवर्ड के साथ कॉल करने की सिफारिश की जाती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3