admin管理员组

文章数量:1336099

Using eslint with React configurations I get an error when using Object.defineProperty. The error says:

Avoid using Object.defineProperty, instead use Reflect.defineProperty. (prefer-reflect)

On the eslint documentation of prefer-reflect they say it's deprecated, the reason being:

The original intent of this rule now seems misguided as we have e to understand that Reflect methods are not actually intended to replace the Object counterparts the rule suggests, but rather exist as low-level primitives to be used with proxies in order to replicate the default behavior of various previously existing functionality.

Then my question is: is there any advantage in using Reflect.defineProperty instead of Object.defineProperty?

Using eslint with React configurations I get an error when using Object.defineProperty. The error says:

Avoid using Object.defineProperty, instead use Reflect.defineProperty. (prefer-reflect)

On the eslint documentation of prefer-reflect they say it's deprecated, the reason being:

The original intent of this rule now seems misguided as we have e to understand that Reflect methods are not actually intended to replace the Object counterparts the rule suggests, but rather exist as low-level primitives to be used with proxies in order to replicate the default behavior of various previously existing functionality.

Then my question is: is there any advantage in using Reflect.defineProperty instead of Object.defineProperty?

Share asked Mar 3, 2018 at 15:11 Daniel ReinaDaniel Reina 6,4175 gold badges40 silver badges57 bronze badges 1
  • 1 Yes, the deprecation notice explains it just fine. You should not use this rule. – Bergi Commented Mar 3, 2018 at 15:56
Add a ment  | 

2 Answers 2

Reset to default 6

There is a slight difference between Object.defineProperty and Reflect.defineProperty: the former returns the target object and throws an exception when the descriptor could not be applied (e.g. when the property is non-writable or non-configurable or when the object is non-extensible), while the latter does return a boolean value whether it worked.

I'd argue that this makes Object.defineProperty a bit more useful, unless you're implementing a defineProperty proxy trap.

Just to plement the last answer, with Object.defineProperty you must use a try/catch block for contolling exceptions while with Reflect.defineProperty you just can do a boolean check with an if statement for correct property creation.

本文标签: javascriptIs it better to use ReflectdefineProperty instead of ObjectdefinePropertyStack Overflow