JavaScript метод getOwnPropertyDescriptors()ECMAScript 2017

JavaScript Object

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

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

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


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


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

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
getOwnPropertyDescriptors()ECMAScript 201754.050.041.010.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()ECMAScript 2017 получили дескрипторы всех собственных (неунаследованных) свойств, которые содержат значения атрибутов.

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

И в заключении с использованием метода getOwnPropertyDescriptors()ECMAScript 2017 получили дескрипторы всех собственных (неунаследованных) свойств, как вы можете заметить у свойства "myProperty2" дескриптор изменился.

JavaScript Object