В JavaScript (ES5 +) я пытаюсь выполнить следующий сценарий:
- Объект (из которого будет много отдельных экземпляров), каждый из которых имеет свойство только для чтения
.size
, которое может быть прочитано извне посредством прямого чтения свойств, но не может быть установлено извне. - Свойство
.size
должно поддерживаться/обновляться из некоторых методов, которые находятся на прототипе (и должны оставаться на прототипе). - Мой API уже определен спецификацией, поэтому я не могу ее изменить (я работаю над polyfill для уже определенного объекта ES6).
- В основном я стараюсь, чтобы люди случайно не стреляли в ногу, и на самом деле не должны иметь пуленепробиваемый доступ к чтению (хотя, чем более пуленепробиваемым, тем лучше), поэтому я готов для компрометации некоторых при доступе к боковой двери в свойство, пока не разрешено прямое установление
obj.size = 3;
.
Мне известно, что я могу использовать приватную переменную, объявленную в конструкторе, и настроить getter для ее чтения, но мне пришлось бы перемещать методы, которые должны поддерживать эту переменную с прототипа и объявлять их внутри конструктора также (поэтому они имеют доступ к закрытию, содержащему переменную). Для этого конкретного случая я бы предпочел не использовать мои методы для прототипа, поэтому я ищу, какие могут быть другие варианты.
Какие еще могут быть другие идеи (даже если есть какие-то компромиссы)?