JavaScript Object.defineProperty(): использование и примеры

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

Обычно вы используете Object.defineProperty()в следующих сценариях:

  1. Добавление нового свойства с настраиваемыми атрибутами. Вы можете использовать Object.defineProperty(), чтобы добавить новое свойство к объекту с определенными атрибутами. Например:
const obj = {};
Object.defineProperty(obj, 'myProperty', {
  value: 42,
  writable: false,
  enumerable: true,
  configurable: true
});
  1. Изменение существующих атрибутов свойства. Если вам нужно изменить атрибуты существующего свойства, можно использовать Object.defineProperty(). Например, с помощью этого метода можно сделать свойство недоступным для записи или неперечисляемым.
const obj = { myProperty: 42 };
// Make the property non-writable
Object.defineProperty(obj, 'myProperty', {
  writable: false
});
// Make the property non-enumerable
Object.defineProperty(obj, 'myProperty', {
  enumerable: false
});
  1. Геттеры и установки: Object.defineProperty()можно использовать для определения свойств с помощью пользовательских функций получения и установки. Это позволяет выполнять собственный код при доступе к свойству или его изменении.
const obj = {};
let _myProperty = 42;
Object.defineProperty(obj, 'myProperty', {
  get() {
    console.log('Getting the value...');
    return _myProperty;
  },
  set(value) {
    console.log('Setting the value...');
    _myProperty = value;
  }
});
console.log(obj.myProperty); // Output: Getting the value... 42
obj.myProperty = 24; // Output: Setting the value...
console.log(obj.myProperty); // Output: Getting the value... 24