Ecmascript 6 添加用于克隆类对象的方法

Ecmascript 6 添加用于克隆类对象的方法,ecmascript-6,Ecmascript 6,我希望能够克隆我的类的对象。我应该如何为下面的类实现clone方法 export default class Foo { constructor(data) { this.name = data.firstName + " " + data.lastName this.id = data.objectId } clone(s){ } } 只需创建该类的另一个实例并复制属性: clone() { return Objec

我希望能够克隆我的类的对象。我应该如何为下面的类实现clone方法

export default class Foo {
    constructor(data) {
        this.name = data.firstName + " " + data.lastName 
        this.id = data.objectId
    }

    clone(s){
    }
}

只需创建该类的另一个实例并复制属性:

clone() {
    return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
//  or simply
//  return Object.assign(new this.constructor({}), this);
}
您还可以传递选项,以便按照预期在构造函数中初始化属性:

clone() {
    return new Foo({
        firstName: this.name.split(" ")[0],
        lastName: this.name.split(" ").slice(1).join(" "),
        objectId: this.id
    });
}

但是,请注意,创建具有相同(但假定是唯一的)id的多个实例可能不是最好的主意。

只需创建该类的另一个实例并复制属性:

clone() {
    return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
//  or simply
//  return Object.assign(new this.constructor({}), this);
}
您还可以传递选项,以便按照预期在构造函数中初始化属性:

clone() {
    return new Foo({
        firstName: this.name.split(" ")[0],
        lastName: this.name.split(" ").slice(1).join(" "),
        objectId: this.id
    });
}

但是,请注意,创建具有相同(但假定是唯一的)id的多个实例可能不是最好的主意。

如果要从类的一个实例克隆到另一个实例,可以使用:


假设要从类的一个实例克隆到另一个实例,可以使用:


请记住,如果您碰巧绑定了类构造函数中的任何方法,这将导致危险的失败,因为绑定的方法也会被复制。如果您希望安全起见,你可以通过
this
的元素
for
吗?请记住,如果你碰巧绑定了类构造函数中的任何方法,这将是危险的失败,因为绑定的方法也会被复制。如果你想安全起见,你可以通过
this
的元素
for
吗?