假设我有一堂课。
class Test {
constructor() {
this.name = 'name';
this.arr = [];
}
}
我需要从这个类创建多个实例。
const entities = {
1: new Test(),
2: new Test()
}
现在,我需要以浅克隆方式更新其中一个属性。
const newEntities = {
...entities,
[1]: {
...entities[1],
name: 'changed'
}
}
console.log(newEntities[1].arr === entities[1].arr) <=== true
这是有效的,但问题是[1]
是一个简单的对象,而不再是Test
的实例。
我该如何解决?
答案 0 :(得分:2)
您无法使用对象解构来保留实例,因此您需要实现此行为。
第一个示例,在构造函数中设置新属性:
class Test {
constructor(props) {
props = props == null ? {} : props;
this.name = 'name';
this.arr = [];
Object.assign(this, props);
}
}
const newEntities = {
...entities,
[1]: new Test({ ...entities[1], name: 'changed' })
}
Sencod示例,使用自定义方法:
class Test {
constructor() {
this.name = 'name';
this.arr = [];
}
assign(props) {
props = props == null ? {} : props;
const instance = new Test();
Object.assign(instance, this, props);
return instance;
}
}
const newEntities = {
...entities,
[1]: entities[1].assign({ name: 'changed' })
}
答案 1 :(得分:1)