【问题标题】:Is it better to use Reflect.defineProperty instead of Object.defineProperty?使用 Reflect.defineProperty 而不是 Object.defineProperty 会更好吗?
【发布时间】:2018-03-03 15:11:31
【问题描述】:

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

避免使用Object.defineProperty,而是使用Reflect.defineProperty。 (首选反射)

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

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

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

【问题讨论】:

  • 是的,弃用通知解释得很好。你不应该使用这个规则。

标签: javascript ecmascript-6 es6-proxy


【解决方案1】:

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

我认为这会使Object.defineProperty 更有用一点,除非你正在实现defineProperty proxy trap

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2019-08-31
      • 2014-03-19
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      相关资源
      最近更新 更多