如何在 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)
我正在清理一些旧的 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)