[javascript] ES6 कक्षाओं में स्थिर स्थिरांक घोषित करना?


Answers

मैं babel का उपयोग कर रहा हूं और निम्नलिखित वाक्यविन्यास मेरे लिए काम कर रहा है:

class MyClass {
    static constant1 = 33;
    static constant2 = {
       case1: 1,
       case2: 2,
    };
    // ...
}

MyClass.constant1 === 33
MyClass.constant2.case1 === 1

कृपया ध्यान दें कि आपको प्रीसेट "stage-0"
इसे स्थापित करने के लिए:

npm install --save-dev babel-preset-stage-0

// in .babelrc
{
    "presets": ["stage-0"]
}

अद्यतन करें:

वर्तमान में stage-2 उपयोग करें

Question

मैं class में स्थिरांक को कार्यान्वित करना चाहता हूं, क्योंकि वह कोड में उन्हें ढूंढने के लिए समझ में आता है।

अब तक, मैं स्थिर तरीकों के साथ निम्नलिखित कार्यवाही लागू कर रहा हूं:

class MyClass {
    static constant1() { return 33; }
    static constant2() { return 2; }
    // ...
}

मुझे पता है प्रोटोटाइप के साथ झुकाव की संभावना है, लेकिन कई इसके खिलाफ सिफारिश करते हैं।

ES6 कक्षाओं में स्थिरांक लागू करने का कोई बेहतर तरीका है?




Object.freeze का उपयोग कक्षा (ईएस 6) / कन्स्ट्रक्टर फ़ंक्शन (ईएस 5) ऑब्जेक्ट पर अपरिवर्तनीय बनाने के लिए भी संभव है:

class MyConstants {}
MyConstants.staticValue = 3;
MyConstants.staticMethod = function() {
  return 4;
}
Object.freeze(MyConstants);
// after the freeze, any attempts of altering the MyConstants class will have no result
// (either trying to alter, add or delete a property)
MyConstants.staticValue === 3; // true
MyConstants.staticValue = 55; // will have no effect
MyConstants.staticValue === 3; // true

MyConstants.otherStaticValue = "other" // will have no effect
MyConstants.otherStaticValue === undefined // true

delete MyConstants.staticMethod // false
typeof(MyConstants.staticMethod) === "function" // true

कक्षा को बदलने की कोशिश करने से आपको मुलायम असफल हो जाएगा (किसी भी त्रुटि को फेंक नहीं देगा, इसका कोई असर नहीं होगा)।




class Whatever {
    static get MyConst() { return 10; }
}

let a = Whatever.MyConst;

लगता है मेरे लिए काम करता है।




यहां एक और तरीका है जो आप कर सकते हैं

/*
one more way of declaring constants in a class,
Note - the constants have to be declared after the class is defined
*/
class Auto{
   //other methods
}
Auto.CONSTANT1 = "const1";
Auto.CONSTANT2 = "const2";

console.log(Auto.CONSTANT1)
console.log(Auto.CONSTANT2);

नोट - ऑर्डर महत्वपूर्ण है, आप ऊपर स्थिरांक नहीं रख सकते हैं

उपयोग console.log (Auto.CONSTANT1);




Related