Reflect.defineProperty()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

Статический метод Reflect.defineProperty() похож на Object.defineProperty(), но возвращает Boolean.

Интерактивный пример

const object1 = {};

if (Reflect.defineProperty(object1, "property1", { value: 42 })) {
  console.log("property1 created!");
  // Expected output: "property1 created!"
} else {
  console.log("problem creating property1");
}

console.log(object1.property1);
// Expected output: 42

Синтаксис

Reflect.defineProperty(target, propertyKey, attributes)

Параметры

target

Объект, в котором определяется свойство.

propertyKey

Имя определяемого или изменяемого свойства.

attributes

Атрибуты для определяемого или изменяемого свойства.

Возвращаемое значение

Возвращается значение Boolean, указывающее было ли свойство успешно определено.

Исключения

Исключение TypeError, если target не является Object.

Описание

Метод Reflect.defineProperty позволяет точно дополнить или изменить свойство объекта. Для более подробной информации смотрите на аналогичный метод - Object.defineProperty. Object.defineProperty возвращает объект или выбрасывает исключение TypeError, если свойство не было успешно определено. Reflect.defineProperty, в любом случае, просто возвращает Boolean, указывающее было ли свойство успешно определено.

Примеры

Использования Reflect.defineProperty()

js
var obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
obj.x; // 7

Проверка успешно ли было определено свойство

При использовании Object.defineProperty, который возвращал объект в случае успеха, либо выбрасывал исключение TypeError, вы должны были использовать конструкцию try...catch для того, чтобы поймать ошибку, которая случилась при определении свойства. Потому что Reflect.defineProperty возвращает Boolean в любом случае, вы можете использовать конструкцию if...else:

js
if (Reflect.defineProperty(target, property, attributes)) {
  // успех
} else {
  // неудача
}

Спецификации

Specification
ECMAScript® 2025 Language Specification
# sec-reflect.defineproperty

Совместимость с браузерами

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
defineProperty

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Смотрите также