我希望能够克隆我班级的对象。我该如何为下面的类实现克隆方法?
export default class Foo {
constructor(data) {
this.name = data.firstName + " " + data.lastName
this.id = data.objectId
}
clone(s){
}
}
答案 0 :(得分:1)
只需创建该类的另一个实例并复制属性:
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的多个实例可能不是最佳选择。
答案 1 :(得分:1)
假设您要从一个类的实例克隆到另一个实例,可以使用Object.assign
:
export default class Foo {
constructor(data) {
this.name = data.firstName + " " + data.lastName
this.id = data.objectId
}
clone(s) {
// It's important to initalize using an empty object, so as to not cause errors
let copy = new Foo({});
Object.assign(copy, this);
return copy;
}
}