4

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

避免使用Object.defineProperty,而是使用Reflect.defineProperty. (喜欢反映)

在优选反射的 eslint文档中,他们说它已被弃用,原因是:

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

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

4

2 回答 2

4

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

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

于 2018-03-03T16:25:54.127 回答
2

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

于 2018-03-10T20:38:05.773 回答