将 eslint 与 React 配置一起使用时,我在使用 Object.defineProperty
时出现错误。错误说:
避免使用
Object.defineProperty
,而使用Reflect.defineProperty
。(首选-反映(
在 prefer-reflect 的 eslint 文档中,他们说它已被弃用,原因是:
此规则的原始意图现在似乎被误导了,因为我们已经了解到
Reflect
方法实际上并不是为了替换规则建议的Object
对应项,而是作为低级原语存在,与代理一起使用,以复制各种先前存在的功能的默认行为。
那么我的问题是:使用Reflect.defineProperty
而不是Object.defineProperty
有什么好处吗?
Object.defineProperty
和 Reflect.defineProperty
之间略有不同:前者返回目标对象并在无法应用描述符时(例如,当属性不可写或不可配置或对象不可扩展时(抛出异常,而后者确实返回布尔值是否有效。
我认为这会Object.defineProperty
更有用,除非您正在实施defineProperty
代理陷阱。
只是为了补充最后一个答案,对于Object.defineProperty
,您必须使用 try/catch
块来计算异常,而对于Reflect.defineProperty
,您可以使用 if
语句进行布尔检查以正确创建属性。