--- title: Reflect.defineProperty() slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty tags: - ECMAScript 2015 - Method - Reflect translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty ---
Статический метод Reflect
.defineProperty()
похож на {{jsxref("Object.defineProperty()")}}, но возвращает {{jsxref("Boolean")}}.
Reflect.defineProperty(target, propertyKey, attributes)
target
propertyKey
attributes
Возвращается значение {{jsxref("Boolean")}}, указывающее было ли свойство успешно определено.
Исключение {{jsxref("TypeError")}}, если target
не является {{jsxref("Object")}}.
Метод Reflect.defineProperty
позволяет точно дополнить или изменить свойство объекта. Для более подробной информации смотрите на аналогичный метод - {{jsxref("Object.defineProperty")}}. Object.defineProperty
возвращает объект или выбрасывает исключение {{jsxref("TypeError")}}, если свойство не было успешно определено. Reflect.defineProperty
, в любом случае, просто возвращает {{jsxref("Boolean")}}, указывающее было ли свойство успешно определено.
Reflect.defineProperty()
var obj = {}; Reflect.defineProperty(obj, 'x', {value: 7}); // true obj.x; // 7
При использовании {{jsxref("Object.defineProperty")}}, который возвращал объект в случае успеха, либо выбрасывал исключение {{jsxref("TypeError")}}, вы должны были использовать конструкцию try...catch
для того, чтобы поймать ошибку, которая случилась при определении свойства. Потому что Reflect.defineProperty
возвращает {{jsxref("Boolean")}} в любом случае, вы можете использовать конструкцию if...else
:
if (Reflect.defineProperty(target, property, attributes)) { // успех } else { // неудача }
Specification | Status | Comment |
---|---|---|
{{SpecName('ES2015', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}} | {{Spec2('ES2015')}} | Изначальное определение. |
{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Reflect.defineProperty")}}