【问题标题】:Deep merge two class instances深度合并两个类实例
【发布时间】:2018-09-11 20:43:22
【问题描述】:

如何正确深度合并(lodash 喜欢)两个 ES6 类实例
结果对象必须是同一类的实际实例,并且它的属性应该是两个实例属性的深度合并。

【问题讨论】:

  • 合并,还是克隆合并?
  • lodash 合并合并而不克隆,所以如果我坚持问题定义,我会说 merge。但对我来说这实际上并不重要,所以它也可以克隆
  • @zero298 我特别强调了区别,请仔细阅读问题。根本不是重复的。
  • @meltedspark 在这种情况下,_.merge(instance1, instance2) 应该可以正常工作。将新属性值合并到其中不会改变 instance1s 原型。

标签: javascript class ecmascript-6 merge instance


【解决方案1】:

如果不需要创建一个新的实例,下面会做

_.merge(instance1, instance2)

这会将instance2 属性深度合并到instance1 中,同时保留原型。


如果合并的实例应该是一个全新的对象,它仍然可以实现:

let newInstance = Object.assign(Object.create(Object.getPrototypeOf(o1)), _.merge(o1, o2));

这将创建一个新对象,它是同一类 o1 的实例,并将深度合并到其中 o1o2 的属性。
但是,这种方法有一些注意事项,例如(来自here):

如果创建实例时大量使用 构造函数中的闭包。我们可能永远不会现在哪个内部 值已设置,以及如何重现这样的设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2020-11-27
    • 2023-04-06
    • 2017-08-24
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多