使用Reflect.defineProperty比使用Object.defineProperty更好吗?

6
使用eslint与React配置时,使用Object.defineProperty会出现错误。 错误显示为:

避免使用Object.defineProperty,而应使用Reflect.defineProperty。(prefer-reflect)

在eslint的prefer-reflect文档中,他们说它已经被弃用,原因是:

此规则的最初意图现在似乎是错误的,因为我们已经了解到Reflect方法并不实际上意在替换规则建议的Object对应项,而是作为低级基元存在,以与代理一起使用,以复制各种先前存在的功能的默认行为。

那么我的问题是:使用Reflect.defineProperty是否有任何优势,而不是使用Object.defineProperty

1
是的,弃用通知已经讲得很清楚了。你不应该使用这个规则。 - Bergi
2个回答

6
Object.definePropertyReflect.defineProperty之间存在一些微小的差异:前者返回目标对象,当描述符无法被应用时(例如属性是不可写的或不可配置的,或者对象是不可扩展的)会抛出异常,而后者则返回一个布尔值表示是否成功。

我认为这使得Object.defineProperty更有用,除非您正在实现defineProperty代理陷阱


2

补充上一条回答,使用Object.defineProperty时,必须使用try/catch块来控制异常,而使用Reflect.defineProperty时,您只需使用if语句进行正确的属性创建的布尔检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接