深度合并两个类实例

时间:2018-09-11 20:43:22

标签: javascript class ecmascript-6 merge instance

如何正确合并(像 [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [HttpPut("[action]")] public IActionResult EditEmployee(Employee employee) { if (ModelState.IsValid) { _repo.edit(employee); _repo.Save(); return Ok($"update was successful for {employee}"); } return BadRequest("Something Went Wrong"); } 这样的两个 ES6类实例 ??
结果对象必须是同一类的实际实例,并且其属性应该是两个实例的属性的深层合并。

1 个答案:

答案 0 :(得分:0)


如果不需要创建新实例,则可以执行以下操作

_.merge(instance1, instance2)

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


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

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

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

  

如果实例是大量使用创建的,则几乎不可能   构造函数中的闭包。我们现在可能永远不会   设置了值,以及如何重现这样的设置。