JavaScript метод Object.getOwnPropertyDescriptor()
Определение и применение
JavaScript метод getOwnPropertyDescriptor() позволяет возвратить объект дескриптор для указанного
собственного (неунаследованного) свойства заданного объекта. Дескрипторы свойств – это обычные объекты
JavaScript, которые описывают атрибуты и значение свойства.
Подробную информацию о дескрипторах свойств вы можете получить в описании метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
null и undefined вызывают TypeError; другие примитивы преобразуются в
объекты-обёртки. Строка имеет собственные перечислимые индексные свойства.
Учитываются неперечислимые и символьные собственные свойства. Получение дескриптора не вызывает геттер свойства. Возвращается новый объект дескриптора: изменение его полей само по себе не изменяет исходное свойство.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
getOwnPropertyDescriptor | 5 | 12 | 4 | 12 | 5 | 18 | 4 | 12 | 5 | 1.0 | 4.4 | 5 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Object.getOwnPropertyDescriptor( obj, prop );
Спецификация
ECMAScript: Object.getOwnPropertyDescriptor()
Значения параметров
| Параметр | Описание |
|---|---|
obj |
Целевой объект в котором необходимо получить дескриптор для указанного собственного (неунаследованного) свойства. Обязательное значение. |
prop |
Собственное (неунаследованное) свойство целевого объекта, дескриптор которого необходимо получить. Если
свойство не найдено в объекте, то возвращаемое значение будет undefined.
Обязательное значение.
|
Исключения
| Тип исключения | Описание |
|---|---|
TypeError |
null и undefined вызывают TypeError. Остальные примитивы преобразуются
в объекты-обёртки.
|
Примеры, попробуйте сами
В примере «Дескриптор до и после изменения» показан результат вызова метода.
Дескриптор до и после изменения
Измените свойства исходного объекта и сравните результат до и после вызова метода.
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.getOwnPropertyDescriptor(obj, 'myProperty2'))
Object.defineProperty(obj, 'myProperty2', { writable: false, enumerable: false })
console.log(Object.getOwnPropertyDescriptor(obj, 'myProperty2'))
console.log(Object.keys(obj))
В этом примере мы инициализировали объект в котором указали два свойства, с использованием метода
getOwnPropertyDescriptor() получили дескриптор для указанного собственного (неунаследованного) свойства
заданного объекта, который содержит значения атрибутов.
После этого с использованием метода
defineProperty()
мы изменили это свойство объекта, описывая его дескриптором в котором указали, что свойство недоступно для записи (не
допускается изменение свойства объекта с помощью оператора присваивания) и определили, что свойство не отображается
при перечислении свойств объекта в котором оно содержится в цикле for...in, или при вызове метода
Object.keys(), который возвращает массив, содержащий имена всех собственных перечислимых
(неунаследованных) свойств указанного объекта.
И в заключении с использованием метода getOwnPropertyDescriptor() получили дескриптор для указанного
собственного свойства заданного объекта, который как вы можете заметить изменился.