2017-03-11 4 views
1

私は '単純に' typescriptでインスタンスを複製しようとしています。typescriptでクラスインスタンスを複製する

jQuery.extend(true, {}, instance)

方法は、任意のヘルプ

をコピーされないため、動作しません大幅にクラスは、デフォルトコンストラクタを持っている場合は、一般的なクローン機能を持たせることができる

+0

クローンをインスタンス定義してください。誰もJavaのようにあまり普及していない言語であっても、それが実際に意味することに誰も同意しないようです。 –

+0

とにかく、 'Object.create(instance.prototype)'を試してください。 –

+0

@AluanHaddad thxを返信してください。残念ながら、これはTS –

答えて

3

を高く評価されています

function clone<T>(instance: T): T { 
    const copy = new (instance.constructor as { new(): T })(); 
    Object.assign(copy, instance); 
    return copy; 
} 

例:

class A { 
    private _num: number; 
    private _str: string; 

    get num() { 
     return this._num; 
    } 

    set num(value: number) { 
     this._num = value; 
    } 

    get str() { 
     return this._str; 
    } 

    set str(value: string) { 
     this._str = value; 
    } 
} 

let a = new A(); 
a.num = 3; 
a.str = "string"; 

let b = clone(a); 
console.log(b.num); // 3 
console.log(b.str); // "string" 

code in playground

あなたのクラスは(メンバーとして他のクラスのインスタンスを持っている、および/またはデフォルトコンストラクタを持っていない)、より複雑である場合は、構築する方法を知っているあなたのクラスでcloneメソッドを追加し、値を割り当てます。

+0

をお答えいただきありがとうございます。その場合は、コンストラクタを使用しないようにする必要があります。代わりに、私は工場やセッターを使用します。歓声 –

+0

ファイン、次にファクトリ関数とクローン関数をエクスポートしますが、クラス自体はエクスポートしません –

関連する問題