В классических объектно-ориентированных языках программирования все свойства и методы, по степени доступности, делятся на:
В данном разделе рассматриваются публичные методы и св-ва, т.к. простые об-ты не имеют приватных или защищённых метдов и св-в
Листинг 1. Различные варианты создания св-в об-та
Листинг 2. Создание методов об-та
Листинг 3. Установка св-ва только для чтения
const obj = {}
// устанавливаем об-ту св-во name и запрещаем его менять
Object.defineProperty(obj, 'name', {
value: 'Max',
writable: false // только для чтения
})
// СВ-ВО name НЕ ИЗМЕНИТСЯ
obj.name = 'Den'
// !!! ВНИМАНИЕ: если для документа установлен режим "use strict"
// то св-во не только не поменяется, но будет выброшено исключение
console.log(obj)
Листинг 4. Св-во разрешено менять, но нельзя удалять
Передаваемый в Object.defineProperty() об-т называется дескриптором данных. Ключи передаваемого об-та: configurable, enumerable, value, writable, являются соответственно ключами дескриптора данных. Можно также устанавливать дескрипторы доступа: get и set (они же геттеры и сеттеры). Вместе они называются дескрипторами свойств. Детально о методе Object.defineProperty() читать в документации
Листинг 5. Разница между простым добавлением и с помощью метода Object.defineProperty()