Object.defineProperty
Создаёт свойство с точными настройками: только для чтения, скрытое, с геттером.
Доступно с: ES5
Синтаксис
Object.defineProperty(obj, key, descriptor)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| obj | object | Объект, у которого создаётся или меняется свойство. |
| key | string | symbol | Имя свойства. |
| descriptor | object | Описание свойства: value, writable, enumerable, configurable или get и set. |
Возвращаемое значение
objectТот же объект.
Примеры
Свойство только для чтения:
const user = {};
Object.defineProperty(user, 'id', { value: 42, writable: false });
user.id = 7;
console.log(user.id);Результат:
42Скрытое свойство не видно в Object.keys и JSON:
const user = { name: 'Anna' };
Object.defineProperty(user, 'password', { value: 'secret', enumerable: false });
console.log(Object.keys(user));
console.log(JSON.stringify(user));
console.log(user.password);Результат:
[
"name"
]
{"name":"Anna"}
secretПримечания
По умолчанию все флаги (writable, enumerable, configurable) у свойств, созданных этим методом, равны false. У обычных свойств, созданных присваиванием, они равны true.
См. также
- Object.freeze — Запрещает любые изменения объекта.
- get / set — Свойства, за которыми скрываются функции: чтение вызывает get, запись — set.
- Object.keys — Возвращает массив имён свойств объекта.
В учебнике
- Неизменяемость данных — Изменяемые и неизменяемые данные в JavaScript: ссылки на объекты, копирование через spread, методы toSorted и with, Object.freeze и structuredClone.