私のクラスのオブジェクトを複製できるようにします。クラスのクローンメソッドを実装するにはどうすればよいですか?クラスオブジェクトを複製するメソッドを追加する
export default class Foo {
constructor(data) {
this.name = data.firstName + " " + data.lastName
this.id = data.objectId
}
clone(s){
}
}
私のクラスのオブジェクトを複製できるようにします。クラスのクローンメソッドを実装するにはどうすればよいですか?クラスオブジェクトを複製するメソッドを追加する
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を持つ複数のインスタンスを作成すると、最適な方法ではない可能性があります。あなたが別のクラスの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;
}
}
を覚えておいてくださいあなたがバウンド以来、クラスのコンストラクタのいずれかの方法をバインドするために起こる場合、これは危険なほど失敗しますメソッドもコピーされます。 – loganfsmyth
あなたが安全に遊びたいなら、 'this'の要素を通して'のために 'できますか? – MayorMonty