使用Reflect.defineProperty而不是Object.defineProperty更好吗?



将 eslint 与 React 配置一起使用时,我在使用 Object.defineProperty 时出现错误。错误说:

避免使用Object.defineProperty,而使用Reflect.defineProperty。(首选-反映(

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

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

那么我的问题是:使用Reflect.defineProperty而不是Object.defineProperty有什么好处吗?

Object.definePropertyReflect.defineProperty 之间略有不同:前者返回目标对象并在无法应用描述符时(例如,当属性不可写或不可配置或对象不可扩展时(抛出异常,而后者确实返回布尔值是否有效。

我认为这会Object.defineProperty更有用,除非您正在实施defineProperty代理陷阱。

只是为了补充最后一个答案,对于Object.defineProperty,您必须使用 try/catch 块来计算异常,而对于Reflect.defineProperty,您可以使用 if 语句进行布尔检查以正确创建属性。

最新更新