将eslint与React配置一起使用我在使用Object.defineProperty
时遇到错误。错误说:
避免使用
Object.defineProperty
,而是使用Reflect.defineProperty
。 (喜欢-反映)
在eslint documentation of prefer-reflect上,他们说它已被弃用,原因是:
这条规则的最初意图现在似乎是错误的,因为我们已经明白
Reflect
方法实际上并不是要取代规则所暗示的Object
对应方,而是作为低级原语存在与代理一起使用以复制各种先前存在的功能的默认行为。
然后我的问题是:使用Reflect.defineProperty
代替Object.defineProperty
有什么好处吗?
答案 0 :(得分:2)
Object.defineProperty
和Reflect.defineProperty
之间存在细微差别:前者返回目标对象,并在无法应用描述符时抛出异常(例如,当属性不可写或非属性时)可配置或当对象是不可扩展的时候),而后者确实返回一个布尔值,无论它是否有效。
我认为这会使Object.defineProperty
更有用,除非您正在实施defineProperty
proxy trap。
答案 1 :(得分:0)
为了补充最后一个答案,使用Object.defineProperty
,您必须使用try/catch
块来控制异常,而使用Reflect.defineProperty
,您只需使用if
进行布尔检查正确创建属性的声明。