使用 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 进行布尔检查=] 正确 属性 创建的语句。