क्लास

ES6 में "क्लास" का सिद्धांत पेश किया गया जो JavaScript में है, जो अन्य प्रोग्रामिंग भाषाओं की क्लास में शामिल होते हैं. यहां, क्लास वे खास फ़ंक्शन हैं जो ऐसे ऑब्जेक्ट बनाने के लिए टेम्प्लेट के रूप में काम करते हैं जिनमें पहले से ही डेटा, प्रॉपर्टी होती हैं उस डेटा और उस डेटा के साथ इस्तेमाल किए जाने वाले तरीकों से जुड़े हों. इन ऑब्जेक्ट, प्रॉपर्टी, और तरीकों को एक साथ "सदस्य" कहा जाता है का तरीका क्लास.

क्लास तय करने के लिए, class कीवर्ड का इस्तेमाल करें. सबसे सही तरीकों का पालन करना और JavaScript के बिल्ट-इन कंस्ट्रक्टर फ़ंक्शन से स्थापित कन्वेंशन, किसी भी कैपिटल लेटर वाली क्लास का आइडेंटिफ़ायर:

class MyClass {}

क्लास का मकसद ऐडवांस्ड क्लास के साथ काम करने के लिए ज़्यादा सुलभ तरीके उपलब्ध कराना है प्रोटोटाइप और कंस्ट्रक्टर फ़ंक्शन की सुविधाएं:

class MyClass {}

typeof MyClass;
> "function"

क्योंकि ऐडवांस JavaScript के साथ काम करने के लिए क्लास को कुछ हद तक जोड़ा गया था आसान और ज़्यादा आकर्षक होती हैं, इसलिए उन्हें स्टैंडर्ड "सिंटिक शुगर". हालांकि, क्लास में काम करने के लिए, न सिर्फ़ शॉर्टहैंड, बल्कि काम की जानकारी भी मिलती है प्रोटोटाइप इनहेरिटेंस. लंबे समय से चले आ रहे डिज़ाइन का इस्तेमाल करने के लिए, पेश है क्लास सिंटैक्स की समस्याओं को हल करना. एक उदाहरण के लिए, क्लास के मुख्य भाग में मौजूद सभी कोड का आकलन हमेशा स्ट्रिक्ट मोड चालू करें.

क्लास का इंस्टेंस बनाने के लिए, new ऑपरेटर का इस्तेमाल करें.

class MyClass {}

const myClassInstance = new MyClass();

myClassInstance
;
> Object { }

क्लास के मुख्य हिस्से में बताए गए फ़ंक्शन, दोनों के तरीकों के तौर पर दिखाए जाते हैं डालें.

class MyClass {
    classMethod
() {
        console
.log( "My class method." );
   
}
}

const myClassInstance = new MyClass();

myClassInstance
.classMethod();
> "My class method."

क्लास में तय किया गया तरीका, क्लास के प्रोटोटाइप की मेथड बन जाता है नतीजे के तौर पर दिखेगा. इसकी वजह से प्रोटोटाइप चेन, जिसे किसी भी समय ये तरीके सीधे तौर पर बनने वाले ऑब्जेक्ट पर लागू करें:

class MyClass {
  classMethod
() {
    console
.log( "My class method." );
 
}
}

const myClassInstance = new MyClass( "A string." );

myClassInstance
;
> Object { }
   
<prototype>: Object { }
        classMethod
: function classMethod()
        constructor
: class MyClass { constructor(myPassedValue) }
       
<prototype>: Object { }

myClassInstance
.classMethod();
> "My class method."

क्लास का इंस्टेंस बनाने पर, एक खास constructor() तरीका कॉल होता है जो सभी ज़रूरी "सेटअप" करता है को जोड़ने की कोशिश करता है और जुड़ी हुई प्रॉपर्टी शामिल हैं. क्लास को पास किया जाने वाला कोई भी आर्ग्युमेंट, जब इंस्टेंस बनाने की सुविधा, constructor() तरीके का इस्तेमाल करके बनाई जा सकती है:

class MyClass {
  constructor
( myPassedValue ) {
    console
.log( myPassedValue );
 
}
}

const myClassInstance = new MyClass( "A string." );
> "A string."

क्लास के मुख्य भाग में, this की वैल्यू खुद इंस्टेंस को दिखाती है, this पर तय की गई किसी भी प्रॉपर्टी के साथ, इसके हर इंस्टेंस की प्रॉपर्टी के तौर पर दिखेगी उस क्लास:

class MyClass {
  constructor
( myPassedValue ) {
   
this.instanceProperty = myPassedValue;
 
}
}

const myClassInstance = new MyClass( "A string." );

myClassInstance
;
> Object { instanceProperty: "A string." }

ये प्रॉपर्टी, क्लास के मुख्य हिस्से में मौजूद सभी तरीकों के लिए भी उपलब्ध हैं:

class MyClass {
  constructor
( myPassedValue ) {
   
this.instanceProp = myPassedValue;
 
}
  myMethod
() {
    console
.log( this.instanceProp );
 
}
}

const myClassInstance = new MyClass( "A string." );

myClassInstance
.myMethod();
> "A string."

अगर आप अपनी क्लास के लिए constructor() तय नहीं करते है, तो JavaScript इंजन खाली "डिफ़ॉल्ट" को मान लेता है constructor. हर क्लास में सिर्फ़ एक खास इवेंट हो सकता है constructor() नाम का तरीका:

class MyClass {
  constructor
() {}
  constructor
() {}
}
> Uncaught SyntaxError: A class may only have one constructor

आप क्लास डिक्लेरेशन या फिर किसी क्लास का इस्तेमाल करके क्लास तय कर सकते हैं क्लास एक्सप्रेशन के साथ किया जा सकता है. ऊपर दिए गए सभी उदाहरण में क्लास की जानकारी होती है, जिनके लिए new का इस्तेमाल करके नाम इस्तेमाल करना ज़रूरी है. क्लास एक्सप्रेशन को नाम या "अनाम" बनाने के लिए बिना नाम वाली बाईं ओर क्लास.

let ClassExpression = class {
    constructor
() {}
};

ClassExpression;
> class  {}

अनाम क्लास एक्सप्रेशन का इस्तेमाल करने के लिए, फ़ंक्शन का इस्तेमाल किया जा सकता है क्लास "पहले से डिज़ाइन करें:"

function classMaker() {
 
return class {
    constructor
() {}
 
};
}

let
MyVariable = classMaker();

MyVariable;
> class  {}

क्लास एलान का इस्तेमाल करके क्लास को फिर से एलान करने पर सिंटैक्स गड़बड़ी होती है:


class MyClass {
    constructor
( ) {
        console
.log( "My class." );
   
}
};

class MyClass {
    constructor
() {
        console
.log( "My new class." );
   
}
};
> Uncaught SyntaxError: redeclaration of class MyClass

हालांकि, क्लास एक्सप्रेशन आपको क्लास को फिर से परिभाषित करने देते हैं:

let ClassExpression = class MyClass { };

ClassExpression = class MyOtherClass {
    constructor
( myString ) {
       
this.myProp = myString;
   
}
};

new ClassExpression( "String." );
> MyOtherClass {myProp: 'String.'}

आप क्लास की तरह नाम से नाम वाले क्लास एक्सप्रेशन का इस्तेमाल नहीं कर सकते एलान के लिए उपलब्ध है. हालांकि, क्लास एक्सप्रेशन के लिए असाइन किया गया नाम बनाए गए इंस्टेंस की प्रॉपर्टी, जिसका मुख्य मकसद डीबग करना आसान बनाना है:

let MyVariable = class MyClass {};

MyClass;
> Uncaught ReferenceError: MyClass is not defined

MyVariable;
> class MyClass {}

MyVariable.name;
> "MyClass"

जब क्लास एक्सप्रेशन का इस्तेमाल करके वैरिएबल की शुरुआत की जाती है, तो फ़ैक्टिंग के नियम कि वैरिएबल उम्मीद के मुताबिक फ़ॉलो किए गए हों. क्लास का एलान वही "टेंपोरल डेड ज़ोन" let और const के हिसाब से नियम, और इस तरह से व्यवहार कर सकते हैं जैसे उन्हें उनके मौजूदा दायरे के सबसे ऊपरी हिस्से तक न पहुंचाया गया हो. इसका मतलब है कि क्लास एलान से पहले क्लास शुरू करने से गड़बड़ी होती है:

{
    let myVar
= new MyClass( "Property string." );

   
class MyClass {
        myProp
;

        constructor
( myString ) {
           
this.myProp = myString;
       
}
   
};
};
> Uncaught ReferenceError: Cannot access 'MyClass' before initialization

देखें कि आपको कितना समझ आया है

इनमें से कौनसा विकल्प क्लास को सही तरीके से परिभाषित करता है?

new class()
myClass = class {}
class MyClass {}

क्लास में कितने constructor() तरीके हो सकते हैं?

कोई नहीं
एक
अनलिमिटेड