使用 Reflect.defineProperty 而不是 Object.defineProperty 更好吗?
Is it better to use Reflect.defineProperty instead of Object.defineProperty?
在 React 配置中使用 eslint 在使用 Object.defineProperty
时出现 error。错误说:
Avoid using Object.defineProperty
, instead use Reflect.defineProperty
. (prefer-reflect)
在 eslint documentation of prefer-reflect 上,他们说它已被弃用,原因是:
The original intent of this rule now seems misguided as we have come 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.
那么我的问题是:使用 Reflect.defineProperty
代替 Object.defineProperty
有什么优势吗?
Object.defineProperty
and Reflect.defineProperty
之间有细微差别:前者return是目标对象,当无法应用描述符时抛出异常(例如,当属性是non-writable 或 non-configurable 或当对象为 non-extensible 时),而后者 return 一个布尔值是否有效。
我认为这会使 Object.defineProperty
更有用,除非您要实施 defineProperty
proxy trap。
只是为了补充最后一个答案,使用 Object.defineProperty
你必须使用 try/catch
块来控制异常,而使用 Reflect.defineProperty
你可以使用 [=13 进行布尔检查=] 正确 属性 创建的语句。
在 React 配置中使用 eslint 在使用 Object.defineProperty
时出现 error。错误说:
Avoid using
Object.defineProperty
, instead useReflect.defineProperty
. (prefer-reflect)
在 eslint documentation of prefer-reflect 上,他们说它已被弃用,原因是:
The original intent of this rule now seems misguided as we have come to understand that
Reflect
methods are not actually intended to replace theObject
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.
那么我的问题是:使用 Reflect.defineProperty
代替 Object.defineProperty
有什么优势吗?
Object.defineProperty
and Reflect.defineProperty
之间有细微差别:前者return是目标对象,当无法应用描述符时抛出异常(例如,当属性是non-writable 或 non-configurable 或当对象为 non-extensible 时),而后者 return 一个布尔值是否有效。
我认为这会使 Object.defineProperty
更有用,除非您要实施 defineProperty
proxy trap。
只是为了补充最后一个答案,使用 Object.defineProperty
你必须使用 try/catch
块来控制异常,而使用 Reflect.defineProperty
你可以使用 [=13 进行布尔检查=] 正确 属性 创建的语句。