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 сентябрь 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
, указывающее было ли свойство успешно определено.
Исключения
Описание
Метод Reflect.defineProperty
позволяет точно дополнить или изменить свойство объекта. Для более подробной информации смотрите на аналогичный метод - Object.defineProperty
. Object.defineProperty
возвращает объект или выбрасывает исключение TypeError
, если свойство не было успешно определено. Reflect.defineProperty
, в любом случае, просто возвращает Boolean
, указывающее было ли свойство успешно определено.
Примеры
>Использования Reflect.defineProperty()
var obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
obj.x; // 7
Проверка успешно ли было определено свойство
При использовании Object.defineProperty
, который возвращал объект в случае успеха, либо выбрасывал исключение TypeError
, вы должны были использовать конструкцию try...catch
для того, чтобы поймать ошибку, которая случилась при определении свойства. Потому что Reflect.defineProperty
возвращает Boolean
в любом случае, вы можете использовать конструкцию if...else
:
if (Reflect.defineProperty(target, property, attributes)) {
// успех
} else {
// неудача
}
Спецификации
Specification |
---|
ECMAScript® 2026 Language Specification> # sec-reflect.defineproperty> |
Совместимость с браузерами
Loading…