... но я не был уверен, что сохранение перечислений как "private" уменьшило использование памяти
Противоположность, если что: у вас все еще должен быть объект enums, и , у вас должна быть функция для доступа к нему.
Что касается скорости, я бы об этом не беспокоился. Добавленный вызов функции не будет иметь никакого значения (я изучил его , когда беспокоился об использовании нового forEach
и тому подобного, и даже в IE6 с его массово медленным JS-движком , это просто не имеет значения).
Через пару лет вы, вероятно, сможете получить лучшее из обоих миров: перечисления, доступные только для чтения, благодаря функции Object.defineProperties
ECMAScript5:
var Enums = Object.defineProperties({}, {
ActionStatus: {
value: Object.defineProperties({}, {
New: {value: 1},
Open: {value: 2},
Closed: {value: 3}
})
}
});
// Usage
var n = Enums.ActionStatus.New; // 1
По умолчанию свойства, созданные с defineProperties
, только для чтения .
На самом деле, вы можете получить это сейчас, если добавите «шим» ES5 для создания Object.defineProperties
в браузерах, у которых его еще нет. Версия «shimmed» создаст свойства для чтения и записи, поскольку только поддерживаемая версия может действительно создавать свойства только для чтения, но вы можете написать код сейчас и знать, что он будет работать так, как вам нравится в современных браузерах (около половины все веб-серферы в настоящее время имеют их), хотя все еще работают, но с меньшей надежностью, на менее современных.
И, конечно, EMCAScript6 может пойти дальше, но это все еще в будущем.