如何在 ES2015 中克隆一个对象(包括它的原型)

How to clone an object (including its prototype) in ES2015

我正在清理一些旧的 Backbone.js 应用程序,并将其中的大部分重写为 ES2015。

我遇到了一个我们使用 Underscore.js 克隆模型的地方:

var modelCopy = _.clone(this.model);

直觉上,我重写了它以使用 Object.assign:

const modelCopy = Object.assign({}, this.model);

事实证明,Object.assign 不像 _.clone 那样工作 - 它只给我实际对象的属性和方法 - 而不是它的原型。

我知道 Underscore 无论如何都是 Backbone 的依赖项,但我仍然想知道:如何使用 ES2015 创建对象的实际克隆?

要保留原型,可以使用

const modelCopy = Object.assign(Object.create(Object.getPrototypeOf(this.model)), this.model)