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

时间:2018-03-03 15:11:31

标签: javascript ecmascript-6 es6-proxy

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

  

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

在eslint documentation of prefer-reflect上,他们说它已被弃用,原因是:

  

这条规则的最初意图现在似乎是错误的,因为我们已经明白Reflect方法实际上并不是要取代规则所暗示的Object对应方,而是作为低级原语存在与代理一起使用以复制各种先前存在的功能的默认行为。

然后我的问题是:使用Reflect.defineProperty代替Object.defineProperty有什么好处吗?

2 个答案:

答案 0 :(得分:2)

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

我认为这会使Object.defineProperty更有用,除非您正在实施defineProperty proxy trap

答案 1 :(得分:0)

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