JavaScript метод getOwnPropertyDescriptors()
JavaScript ObjectОпределение и применение
JavaScript метод getOwnPropertyDescriptors() позволяет возвратить объект, содержащий дескрипторы всех собственных (неунаследованных) свойств заданного объекта. Дескрипторы свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства.
Подробную информацию о дескрипторах свойств вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Для того чтобы возвратить объект, содержащий дескриптор определенного собственного свойства заданного объекта, вы можете воспользоваться методом getOwnPropertyDescriptor().
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
getOwnPropertyDescriptors() | 54.0 | 50.0 | 41.0 | 10.0 | Нет | Да |
JavaScript синтаксис:
Object.getOwnPropertyDescriptors( obj );
Версия JavaScript
ECMAScript 2017 (8th Edition, ECMA-262)Значения параметров
Параметр | Описание |
---|---|
obj | Целевой объект в котором необходимо получить дескрипторы собственных (неунаследованных) свойств. Если в качестве значения передается объект в котором отсутствуют собственные (неунаследованные) свойства, то будет возвращен пустой объект. Обязательное значение. |
Пример использования
let obj = { // инициализируем переменную, содержащую объект myProperty: 1000, myProperty2: 2000 }; // получаем дескрипторы всех собственных (неунаследованных) свойств Object.getOwnPropertyDescriptors( obj ) // возвращаемое значение: { myProperty: { value: 1000, // значение свойства 1000 writable: true, // свойство доступно для записи enumerable: true, // свойство перечислимо configurable: true // удаление свойства допускается, а также допускается изменение дескриптора этого свойства } myProperty2: { value: 2000, // значение свойства 2000 writable: true, // свойство доступно для записи enumerable: true, // свойство перечислимо configurable: true // удаление свойства допускается, а также допускается изменение дескриптора этого свойства } } // изменяем в объекте существующее свойство Object.defineProperty( obj, "myProperty2", { value: 5000, // устанавливаем значение свойства writable: false, // устанавливаем, что свойство недоступно для записи enumerable: false // устанавливаем, что свойство не перечислимо }); // получаем дескрипторы всех собственных (неунаследованных) свойств Object.getOwnPropertyDescriptors( obj ) // возвращаемое значение: { myProperty: { value: 1000, // значение свойства 1000 writable: true, // свойство доступно для записи (значение по умолчанию) enumerable: true, // свойство перечислимо (значение по умолчанию) configurable: true // удаление свойства допускается, а также допускается изменение дескриптора этого свойства (значение по умолчанию) } myProperty2: { value: 5000, // значение свойства 5000 writable: false, // свойство недоступно для записи enumerable: false, // свойство не перечислимо configurable: true // удаление свойства допускается, а также допускается изменение дескриптора этого свойства (значение по умолчанию) } }
В этом примере мы инициализировали объект в котором указали два свойства, с использованием метода getOwnPropertyDescriptors() получили дескрипторы всех собственных (неунаследованных) свойств, которые содержат значения атрибутов.
После этого с использованием метода defineProperty() мы изменили свойство "myProperty2" объекта, описывая его дескриптором в котором указали, что свойство недоступно для записи (не допускается изменение свойства объекта с помощью оператора присваивания) и определили, что свойство не отображается при перечислении свойств объекта в котором оно содержится в цикле for..in, или при вызове метода Object.keys(), который возвращает массив, содержащий имена всех собственных перечислимых (неунаследованных) свойств указанного объекта.
И в заключении с использованием метода getOwnPropertyDescriptors() получили дескрипторы всех собственных (неунаследованных) свойств, как вы можете заметить у свойства "myProperty2" дескриптор изменился.
JavaScript Object