JavaScript метод getOwnPropertyDescriptor()
JavaScript ObjectОпределение и применение
JavaScript метод getOwnPropertyDescriptor() позволяет возвратить объект дескриптор для указанного собственного (неунаследованного) свойства заданного объекта. Дескрипторы свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства.
Подробную информацию о дескрипторах свойств вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Для того чтобы возвратить объект, содержащий дескрипторы всех собственных (неунаследованных) свойств заданного объекта, вы можете воспользоваться методом getOwnPropertyDescriptors().
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
getOwnPropertyDescriptor() | 5.0 | 4.0 | 12.0 | 5.0 | 8.0 | Да |
JavaScript синтаксис:
Object.getOwnPropertyDescriptor( obj, prop );
Версия JavaScript
ECMAScript 5.1 (реализовано в JavaScript 1.8.5)Значения параметров
Параметр | Описание |
---|---|
obj | Целевой объект в котором необходимо получить дескриптор для указанного собственного (неунаследованного) свойства. Обязательное значение. |
prop | Собственное (неунаследованное) свойство целевого объекта, дескриптор которого необходимо получить. Если свойство не найдено в объекте, то возвращаемое значение будет undefined. Обязательное значение. |
Исключения
Тип исключения | Описание |
---|---|
TypeError | Возникает в том случае, если значение параметра, определяющее целевой объект не является объектом. Начиная с версии ECMAScript 6 параметр, который не является объектом будет сначала приведён к объекту. |
Пример использования
let obj = { // инициализируем переменную, содержащую объект myProperty: 1000, myProperty2: 2000 }; // получаем дескриптор для свойства "myProperty2" Object.getOwnPropertyDescriptor( obj, "myProperty2") // возвращаемое значение: { value: 2000, // значение свойства 2000 writable: true, // свойство доступно для записи enumerable: true, // свойство перечислимо configurable: true // удаление свойства допускается, а также допускается изменение дескриптора этого свойства } // изменяем в объекте существующее свойство Object.defineProperty( obj, "myProperty2", { value: 5000, // устанавливаем значение свойства writable: false, // устанавливаем, что свойство недоступно для записи enumerable: false // устанавливаем, что свойство не перечислимо }); // получаем дескриптор для свойства "myProperty2" Object.getOwnPropertyDescriptor( obj, "myProperty2") // возвращаемое значение: { value: 5000, // значение свойства 5000 writable: false, // свойство недоступно для записи enumerable: false, // свойство не перечислимо configurable: true // удаление свойства допускается, а также допускается изменение дескриптора этого свойства }
В этом примере мы инициализировали объект в котором указали два свойства, с использованием метода getOwnPropertyDescriptor() получили дескриптор для указанного собственного (неунаследованного) свойства заданного объекта, который содержит значения атрибутов.
После этого с использованием метода defineProperty() мы изменили это свойство объекта, описывая его дескриптором в котором указали, что свойство недоступно для записи (не допускается изменение свойства объекта с помощью оператора присваивания) и определили, что свойство не отображается при перечислении свойств объекта в котором оно содержится в цикле for..in, или при вызове метода Object.keys(), который возвращает массив, содержащий имена всех собственных перечислимых (неунаследованных) свойств указанного объекта.
И в заключении с использованием метода getOwnPropertyDescriptor() получили дескриптор для указанного собственного свойства заданного объекта, который как вы можете заметить изменился.
JavaScript Object