2016-10-31 4 views
0

私のクラスのオブジェクトを複製できるようにします。クラスのクローンメソッドを実装するにはどうすればよいですか?クラスオブジェクトを複製するメソッドを追加する

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

    clone(s){ 
    } 
} 

答えて

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; 
    } 
} 
+0

を覚えておいてくださいあなたがバウンド以来、クラスのコンストラクタのいずれかの方法をバインドするために起こる場合、これは危険なほど失敗しますメソッドもコピーされます。 – loganfsmyth

+0

あなたが安全に遊びたいなら、 'this'の要素を通して'のために 'できますか? – MayorMonty

関連する問題