क्लास के फ़ील्ड और तरीके

क्लास फ़ील्ड का एलान सीधे क्लास के मुख्य हिस्से में किया जाता है, साफ़ तौर पर नहीं को this वैल्यू की प्रॉपर्टी के तौर पर जोड़ा गया है. हालांकि, नतीजा यही होता है: प्रॉपर्टी को उसी क्लास के इंस्टेंस के हिसाब से तय किया गया हो.

class MyClass {
    myField;
}

const myClassInstance = new MyClass();

myClassInstance;
> MyClass { myField: undefined }

वैल्यू वाले फ़ील्ड को शुरू किया जा सकता है. यह अक्सर एक डिफ़ॉल्ट वैल्यू होती है, जो क्लास के अंदर मौजूद लॉजिक, इसे ओवरराइट कर सकता है:

class MyClass {
    myResult = false;
    set setValue( myValue ) {
        this.myResult = myValue;
    }
}
const myClassInstance = new MyClass();

myClassInstance;
> Object { myResult: false }

myClassInstance.setValue = true;

myClassInstance;\
> Object { myResult: true }

क्लास फ़ील्ड, क्लास से जुड़ी प्रॉपर्टी की तरह ही काम करते हैं this का इस्तेमाल करके. इसका मतलब यह है कि उन्हें क्लास की तरह ही करते हैं.

class MyClass {
    myField = true;
}

const myClassInstance = new MyClass();

myClassInstance.myField;
> true

myClassInstance.myField = false;

myClassInstance.myField;
> false;

फ़ील्ड, क्लास की कुछ ज़्यादा बेहतर सुविधाओं का आधार बनाते हैं.

निजी फ़ील्ड और तरीके

क्लास के बाहर निजी फ़ील्ड और तरीकों को ऐक्सेस नहीं किया जा सकता. निजी प्रॉपर्टी, क्लास के एक इंस्टेंस से जुड़ी होती है. इसका मतलब है कि हर इंस्टेंस इसमें क्लास के हिसाब से, निजी फ़ील्ड और तरीकों का अपना सेट होता है.

किसी प्रॉपर्टी को निजी बनाने के लिए, आइडेंटिफ़ायर की शुरुआत में # जोड़ें, जब इसका एलान किया जाएगा:

class MyClass {
    #myPrivateField = true;
    #myPrivateMethod() {}
}
const myClassInstance = new MyClass();

myClassInstance;
> MyClass { #myPrivateField: true }
    #myPrivateField: true
    <prototype>: Object {  }
        constructor: class MyClass {}
        <prototype>: Object {  }

शामिल क्लास के मुख्य भाग में एक निजी फ़ील्ड होना चाहिए. आप इसकी वैल्यू को बाद में, this की प्रॉपर्टी के तौर पर बदल दिया जाता है, लेकिन फ़ील्ड नहीं बनाया जा सकता this का इस्तेमाल करके.

स्क्रिप्ट में कहीं और से निजी फ़ील्ड को ऐक्सेस नहीं किया जा सकता. इसकी वजह से, डेटा खर्च नहीं हो पा रहा है दी गई गैटर और सेटर विधियों के बाहर बदली जाने वाली प्रॉपर्टी का इस्तेमाल किया जा सकता है. साथ ही, यह सीधे तौर पर सिर्फ़ क्लास में इस्तेमाल करने के लिए तय किए गए तरीके.

class MyClass {
    #myResult = false;
    set setValue( myValue ) {
        this.#myResult = myValue;
    }
}
const myClassInstance = new MyClass();

myClassInstance;
> MyClass { #myResult: false }

myClassInstance.#myResult = true;
> Uncaught SyntaxError: reference to undeclared private field or method #myResult

myClassInstance.setValue = true;

myClassInstance;\
> MyClass { #myResult: true }

हालांकि, ध्यान रखें कि ब्राउज़र के आम तौर पर, डेवलपर कंसोल अनुमति है, हालांकि, यह अलग-अलग है. डीबग करने के लिए निजी फ़ील्ड का ऐक्सेस देने के बारे में मकसद:

class MyClass {
    #myPrivateField = true;
    #myPrivateMethod() {
        console.log( "This is inside a private method." );
    }
}
const myClassInstance = new MyClass();

myClassInstance;
> MyClass {#myPrivateField: true}

myClassInstance.#myPrivateField;
> true

myClassInstance.#myPrivateMethod();
> "This is inside a private method."
class MyClass {
    #myPrivateField = true;
    #myPrivateMethod() {
        console.log( "This is inside a private method." );
    }
}
const myClassInstance = new MyClass();

myClassInstance;
> MyClass {#myPrivateField: true}

myClassInstance.#myPrivateField;
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateField

myClassInstance.#myPrivateMethod();
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateMethod

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

class MyClass {
    #myPrivateField = true;
}
class ChildClass extends MyClass {
    childMethod() {
        console.log( this.#myPrivateField );
    }
}
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateField

स्टैटिक फ़ील्ड और तरीके

स्टैटिक फ़ील्ड और मेथड, क्लास के सदस्य होते हैं, न कि इंस्टेंस होने चाहिए. इस कारण, स्थिर फ़ील्ड एक केंद्रीय उस डेटा के लिए पॉइंट जो क्लास के हर इंस्टेंस के लिए यूनीक नहीं होगा, लेकिन इंस्टेंस की ज़रूरत पड़ सकती है—उदाहरण के लिए, शेयर की गई कॉन्फ़िगरेशन की जानकारी. स्थैतिक तरीके अक्सर किसी यूटिलिटी फ़ंक्शन के रूप में कार्य करते हैं, जो क्लास का इस्तेमाल करें, जैसे इंस्टेंस में मौजूद किसी फ़ील्ड के हिसाब से उनके इंस्टेंस की तुलना करना या उन्हें क्रम से लगाना.

क्लास के मुख्य भाग में स्टैटिक फ़ील्ड और मेथड तय करने के लिए, static का इस्तेमाल करें कीवर्ड:

class MyClass {
    static myStaticField;
    static myStaticMethod() {}
}
const myClassInstance = new MyClass();

स्टैटिक तरीका बनाने के लिए, डॉट नोटेशन का भी इस्तेमाल किया जा सकता है:

class MyClass {
    constructor() {}
}
MyClass.myStaticMethod = function() {}

क्लास के इंस्टेंस से स्टैटिक प्रॉपर्टी ऐक्सेस नहीं की जा सकतीं, लेकिन ये क्लास कंस्ट्रक्टर पर उपलब्ध है:

class MyClass {
    static myStaticField = true;
    static myStaticMethod() {
        console.log( "A static method." );
    }
}
const myClassInstance = new MyClass();

myClassInstance.myStaticField;
> undefined

myClassInstance.myStaticMethod();
> Uncaught TypeError: myClassInstance.myStaticMethod is not a function

MyClass.myStaticField;
> true

MyClass.myStaticMethod();
> "A static method."

तकनीकी रूप से ज़रूरी नहीं हैं, लेकिन स्टैटिक तरीकों का इस्तेमाल करना सबसे सही तरीका है क्लास के इंस्टेंस के साथ काम करने के लिए सुविधाएं बनाना. इसके उदाहरण हो सकते हैं इसमें क्लास के इंस्टेंस को क्रम से लगाने के लिए एक स्टैटिक तरीका या कोई स्टैटिक तरीका शामिल है बनाने का तरीका इस्तेमाल करें, जिसमें इंस्टेंस बनाने के लिए कोई भी ज़रूरी सेटअप शामिल हो क्लास का उदाहरण दिखाता है और फिर क्लास इंस्टेंस लौटाता है:

class User {
    constructor( name, email ) {
        this.name = name;
        this.email = email;
    }
    static fromObject( myObject ) {
        return new User( myObject.name, myObject.email ?? "Omitted" );
    }
}
const userObject = {
    "name" : "My Name",
    "email" : "my@email.address"
};
const secondUserObject = {
    "name" : "My Name"
};

const firstUser = User.fromObject( userObject );
const secondUser = User.fromObject( secondUserObject );

firstUser;
> Object { name: "My Name", email: "my@email.address" }

secondUser;
> Object { name: "My Name", email: "Omitted" }

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

इनमें से किस तरह के फ़ील्ड को सिर्फ़ यहां से ऐक्सेस किया जा सकता है की मदद से कैसे मैनेज करें?

Static fields
क्लास के फ़ील्ड
निजी फ़ील्ड