JavaScriptの変数3つのメソッドをコピーします

参考:JavaScriptでのオブジェクトのコピー  - Orinami Olatunji(@orinamio_)2017年10月23日

 
 場合は、直接他の変数への変数に、システムは、新しい変数を作成しませんが、元の変数のアドレスは、新しい変数名に割り当てられました。栗の場合:
OBJ = LET { 
  A: 1 
  B: 2 
}; 
せコピー = OBJ; 

obj.a。= 5 ; 
にconsole.log(copy.a); 
// 結果
// 。A = 5; //はOBJの値を変更し、変数の値が変更されますコピー

多くの方法が、この記事では、唯一の3つの一般使用を選択し、それぞれの長所と短所を分析し、どのような状況下での使用は、その最高です、記事が言及しています。

1.ネイティブソリューション

最も簡単な方法は、新しい変数のサイクルをコピーすることです。李の場合:

関数のコピー(mainObj){ 
  objcopyをせ = {}; // objcopyをはmainObjのコピーが保存されます
  キーましょう。

  (キーmainObj){ 
    objcopyを[キー] = mainObj [キー]。// objcopyをオブジェクトにコピー各プロパティを
  }
   戻りobjcopyを。
} 

CONST mainObj = {  2 
  B: 5 
  C:{ 
    X: 7 
    Y: 4 
  } 
} 

にconsole.log(コピー(mainObj))。

短所:

Object.prototype方法とmainObj 1. objcopyを、我々は正確なコピーを必要とするとき、このアプローチは適用されません。通常、異なるものになります。

2.面倒で時間がかかり、面倒な、コードを再利用することはできません。

3.オブジェクト変数が元の型が含まれている場合は、コピーまたはサブインデックスは、新しいコピーを作成しないで、新しい変数に、この変数を配置します。

2.深さをコピーします

JSON変換をコピーするための変数。最初に元の文字列に可変とJSONに再組み立てが、これは別のコピーを生成します。

せOBJ = {  1 
  B:{ 
    C: 2 
  }、
} 

せNEWOBJ = JSON.parse(JSON.stringify(OBJ))。

obj.bc = 20 
console.log(OBJ)。// {:1、B:{C:20}} 
にconsole.log(NEWOBJ)。// {:1、B:{C:2}}(新しいオブジェクト無傷!)

短所:

1.変数多くの時間は非常に時間がかかり、メモリです。

3. Object.assign()

使用例:

// 円形の物体 
せOBJ = {  'A' 
  B:{ 
    C: 'C' 
    D: 'D' 
  }、
} 

obj.c = obj.b。
obj.e = obj.a。
obj.bc = obj.c。
obj.bd = obj.b。
obj.be = obj.bc。

newObj2せ = ({}、OBJ)Object.assign。

console.log(newObj2)。

これは、メソッドにパッケージ化することができます。

カプセル化された//方法
//
変数の新しいコピーを戻す // オブジェクトのAコピーを取得する 機能getNewObjectOf(SRC){ 戻りObject.assign({}、SRCを); }

短所:

1.これも浅いコピーである(コピーのみtop属性、根本的なプロパティがコピーされていません)。ディーププロパティは、元の変数とアドレスを共有し、インデックスを返します。(栗下記参照)

せOBJ = {  1 
  B:{ 
    C: 2 
  }、
} 
せNEWOBJ = Object.assign({}、OBJ)。
console.log(NEWOBJ)。// {:1、B:{C:2}} 

obj.a = 10 
console.log(OBJ)。// {:10、B:{C:2}} 
にconsole.log(NEWOBJ)。// {:1、B:{C:2}} 

newObj.a = 20 
console.log(OBJ)。// {:10、B:{C:2}} 
にconsole.log(NEWOBJ)。// {:20、B:{C:2}} 

newObj.bc = 30  
にconsole.log(OBJ)。 // {A:10、B:{C:} 30} 
にconsole.log(NEWOBJ); // {A:20は、Bである:{C:30}} 

// 注:すべての変数*。30に等しいBC;上記参照理由を説明します。

 


 

結論:

オリジナルテキスト、他の多くの方法がありますが、最も有用な記事の抜粋わずか数。多くの変数があるように、第1のアプローチは、一般的に、使用されていない変数が一層のみ(例えば、構成情報JSON変数形式)が含まれている場合、第三のが最もあり、第二のアプローチをコピーする必要があり、その後、層なければなりません効率的。

 

メソッドは、指定された再カプセル化:

カプセル化された//方法
変数の新しいコピーを戻す// オブジェクトのAコピーを取得// 関数getNewObjectOf(SRC){ 戻りObject.assign({}、SRCを); }

 

 

おすすめ

転載: www.cnblogs.com/AndrewXu/p/11601285.html