JavaScript метод Object.getOwnPropertyDescriptors()
Определение и применение
JavaScript метод getOwnPropertyDescriptors() позволяет возвратить объект, содержащий дескрипторы всех
собственных (неунаследованных) свойств заданного объекта. Дескрипторы свойств – это обычные объекты
JavaScript, которые описывают атрибуты и значение свойства.
Подробную информацию о дескрипторах свойств вы можете получить в описании метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
null и undefined вызывают TypeError; другие примитивы преобразуются в
объекты-обёртки. Строка имеет собственные перечислимые индексные свойства.
Учитываются неперечислимые и символьные собственные свойства. Получение дескриптора не вызывает геттер свойства. Возвращается новый объект дескриптора: изменение его полей само по себе не изменяет исходное свойство.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2017 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
getOwnPropertyDescriptors | 54 | 15 | 50 | 41 | 10 | 54 | 50 | 41 | 10 | 6.0 | 54 | 10 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Object.getOwnPropertyDescriptors( obj );
Спецификация
ECMAScript: Object.getOwnPropertyDescriptors()
Значения параметров
| Параметр | Описание |
|---|---|
obj |
Целевой объект в котором необходимо получить дескрипторы собственных (неунаследованных) свойств. Если в качестве значения передается объект в котором отсутствуют собственные (неунаследованные) свойства, то будет возвращен пустой объект. Обязательное значение. |
Примеры, попробуйте сами
В примере «Дескрипторы всех собственных свойств» показан результат вызова метода.
Дескрипторы всех собственных свойств
Измените свойства исходного объекта и сравните результат до и после вызова метода.
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Дескрипторы всех собственных свойств</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
const obj = { myProperty: 1, myProperty2: 2 }
console.log(Object.getOwnPropertyDescriptors(obj))
Object.defineProperty(obj, 'myProperty2', { writable: false, enumerable: false })
console.log(Object.getOwnPropertyDescriptors(obj))
console.log(Object.keys(obj))
В этом примере мы инициализировали объект в котором указали два свойства, с использованием метода
getOwnPropertyDescriptors() получили дескрипторы всех собственных (неунаследованных) свойств, которые
содержат значения атрибутов.
После этого с использованием метода
defineProperty()
мы изменили свойство "myProperty2" объекта, описывая его дескриптором в котором указали, что свойство
недоступно для записи (не допускается изменение свойства объекта с помощью оператора присваивания) и определили, что
свойство не отображается при перечислении свойств объекта в котором оно содержится в цикле for...in, или
при вызове метода Object.keys(), который возвращает массив, содержащий имена всех собственных
перечислимых (неунаследованных) свойств указанного объекта.
И в заключении с использованием метода getOwnPropertyDescriptors() получили дескрипторы всех собственных
(неунаследованных) свойств, как вы можете заметить у свойства "myProperty2" дескриптор изменился.