2017-06-09 22 views
22

के साथ जावास्क्रिप्ट में Enums मैं जावास्क्रिप्ट में एक पुरानी जावा परियोजना का पुनर्निर्माण कर रहा हूं, और महसूस किया कि जेएस में enums करने के लिए कोई अच्छा तरीका नहीं है।ईएस 6

सबसे अच्छा मैं के साथ आ सकता है:

const Colors = { 
    RED: Symbol("red"), 
    BLUE: Symbol("blue"), 
    GREEN: Symbol("green") 
}; 
Object.freeze(Colors); 

const पुन: असाइन किए जाने से Colors रखता है, और ठंड यह कुंजी और मूल्यों परिवर्तनशील रोकता है। मैं प्रतीकों का उपयोग कर रहा हूं ताकि Colors.RED0, या स्वयं के अलावा कुछ और के बराबर न हो।

क्या इस फॉर्मूलेशन में कोई समस्या है? क्या कोई बेहतर तरीका है?


(मैं जानता हूँ कि इस सवाल का एक दोहराने का एक सा है, लेकिन सभी previous Q/As काफी पुराने हैं, और ES6 हमें कुछ नई क्षमताओं देता है।)

+2

इस ES6 में एक आदर्श दृष्टिकोण होगा। यदि आप इसे संशोधित नहीं करना चाहते हैं, तो आपको – Nirus

+2

@ निरुस को फ्रीज नहीं करना होगा। – zerkms

+1

क्या आपने देखा [यह उत्तर] (https://stackoverflow.com/a/30058506/1048572)? – Bergi

उत्तर

27

वहाँ के साथ एक समस्या है यह फॉर्मूलेशन?

मुझे कोई नहीं दिखाई देता है।

क्या कोई बेहतर तरीका है?

मैं एक में दो बयानों पतन चाहते हैं:

const Colors = Object.freeze({ 
    RED: Symbol("red"), 
    BLUE: Symbol("blue"), 
    GREEN: Symbol("green") 
}); 

आप बॉयलरप्लेट, बार-बार Symbol कॉल की तरह पसंद नहीं है, तो आप निश्चित रूप से भी एक सहायक समारोह makeEnum कि बनाता है लिख सकते हैं नामों की सूची से वही बात।

+2

क्या यहां कोई वास्तविक समस्या नहीं है? –

+0

@torazaburo आपका मतलब है, जब कोड दो बार लोड होता है तो यह अलग-अलग प्रतीकों उत्पन्न करेगा, जो तारों के साथ कोई समस्या नहीं होगी? हाँ, अच्छा बिंदु, इसे एक उत्तर दें :-) – Bergi

+0

मुझे लगता है कि आप कहीं भी प्रतीकों को स्टोर कर सकते हैं, और फिर जब आप Enum प्रारंभ करते हैं तो उन्हें असाइन करें। क्या उन्हें अद्वितीय बनाने का कोई और तरीका है? ('Symbol.for' के पास एक ही समस्या होगी।) –

0

ES6 enums के लिए एक बहुत अच्छी और अच्छी तरह से प्रदर्शित लाइब्रेरी Enumify भी देखें।

आशा है कि इससे किसी की मदद मिलेगी।

सादर,

एम्मानुएल

संबंधित मुद्दे