JavaScript метод getOwnPropertyDescriptor()

JavaScript Object

Определение и применение

JavaScript метод getOwnPropertyDescriptor() позволяет возвратить объект дескриптор для указанного собственного (неунаследованного) свойства заданного объекта. Дескрипторы свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства.

Подробную информацию о дескрипторах свойств вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.


Для того чтобы возвратить объект, содержащий дескрипторы всех собственных (неунаследованных) свойств заданного объекта, вы можете воспользоваться методом getOwnPropertyDescriptors()ECMAScript 2017.


Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
getOwnPropertyDescriptor()5.04.012.05.08.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