ฉันกำลังสร้างโปรเจ็กต์ Java เก่าใน Javascript และตระหนักว่าไม่มีวิธีที่ดีในการทำ enums ใน JS
สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ:
const Colors = {
RED: Symbol("red"),
BLUE: Symbol("blue"),
GREEN: Symbol("green")
};
Object.freeze(Colors);
การconst
เก็บรักษาไม่ให้Colors
ถูกกำหนดใหม่และการแช่แข็งจะป้องกันไม่ให้คีย์และค่ากลายพันธุ์ ฉันใช้ Symbols Colors.RED
ไม่เท่ากับ0
หรืออย่างอื่นนอกจากตัวมันเอง
สูตรนี้มีปัญหาหรือไม่? มีวิธีที่ดีกว่า?
(ฉันรู้ว่าคำถามนี้ค่อนข้างซ้ำ แต่Q / As ก่อนหน้านี้ทั้งหมดค่อนข้างเก่าและ ES6 ทำให้เรามีความสามารถใหม่ ๆ )
แก้ไข:
อีกวิธีหนึ่งที่เกี่ยวข้องกับปัญหาการทำให้เป็นอนุกรม แต่ฉันเชื่อว่ายังมีปัญหาเรื่องขอบเขต
const enumValue = (name) => Object.freeze({toString: () => name});
const Colors = Object.freeze({
RED: enumValue("Colors.RED"),
BLUE: enumValue("Colors.BLUE"),
GREEN: enumValue("Colors.GREEN")
});
เมื่อใช้การอ้างอิงวัตถุเป็นค่าคุณจะได้รับการหลีกเลี่ยงการชนกันเป็นสัญลักษณ์