स्टैटिक इनिशलाइज़ेशन ब्लॉक

स्टैटिक इनिशलाइज़ेशन ब्लॉक, JavaScript की नई सुविधा है. इसे ECMAScript 2022 और सिर्फ़ इनमें काम करता है मॉडर्न ब्राउज़र हो. स्टैटिक इनिशलाइज़ेशन ब्लॉक की मदद से, स्टैटिक फ़ील्ड की वैल्यू डाइनैमिक तौर पर सेट की जा सकती है, जिसमें एक से ज़्यादा स्टेटमेंट को पूरा करने वाले लॉजिक का इस्तेमाल किया गया हो.

स्टैटिक इनिशलाइज़ेशन ब्लॉक बनाने के लिए, static कीवर्ड का इस्तेमाल करें. इसके बाद, कर्ली में ब्लॉक स्टेटमेंट ब्रैकेट ({}):

class MyClass {
  static {}
}

इस पैटर्न की मदद से, क्लास:

class MyClass {
  static firstProperty = 'First property.';
  static secondProperty;
  static {
    this.secondProperty = 'Second property.';
  }
}

MyClass.secondProperty;
"Second property."

इन स्टेटमेंट का आकलन तब किया जाता है, जब क्लास पहली बार शुरू होती है, तब होता है, जब JavaScript इंजन पहली बार इसका आकलन करता है, न कि क्लास बनाई गई है, जैसा कि constructor() के साथ किया जाता है:

class MyClass {
    static {
        console.log( "Static initialization block." );
    }
    constructor() {
        console.log( "Constructor." );
    }
}
> "Static initialization block."

const myClassInstance = new MyClass();
> "Constructor."

किसी क्लास में कई स्टैटिक इनिशलाइज़ेशन ब्लॉक हो सकते हैं और वे ब्लॉक उसका आकलन उसी क्रम में किया जाता है उसका एलान किया जाता है. इसमें अन्य स्टैटिक फ़ील्ड और तरीकों का इस्तेमाल करना होगा. इसका मतलब है कि सिर्फ़ स्टैटिक इनिशलाइज़ेशन से पहले तय किए गए फ़ील्ड ब्लॉक उस ब्लॉक में उपलब्ध होते हैं:

class MyClass {
  static myNewField;
  static {
    this.myNewField = this.myField;
  }
  static myField = "My value.";
};

MyClass.myNewField;
> undefined

class MyCorrectedClass {
  static myNewField;
  static myField = "My value.";
  static {
    this.myNewField = this.myField;
  }
};

MyCorrectedClass.myNewField;
> "My value."

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

इनमें से कौनसी बातें सही हैं?

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