2017-02-15 7 views
0

私はangularjsを研究しており、角度ライブラリによって提供されるコピーとマージ機能の使用に関する問題があります。ドキュメントによると、コピーはソースオブジェクトの深いコピーを作成し、マージはソースオブジェクトから独自の列挙可能なプロパティをコピーすることによってデスティネーションオブジェクトを深く拡張します。angular.copyとangular.mergeの相違点

Googleは、コピー対拡張またはマージ対拡張を許可します。私が見つけることができるのは、ディープコピーとディープ・エクステンションの概念です。これら2つの違いは何ですか?どちらが優先されますか?

私はplunkerを作成しており、両方とも同じ出力を持っています。

https://plnkr.co/edit/CORt259oczKwpBzh7cNH?p=preview

これは、コントローラ部を有する抜粋です:

<script type="text/javascript"> 
    var app= angular.module("myapp",[]); 
    app.controller("myctrl",[function(){ 
     var self = this; 
     self.obj={ 
       val1: 'val1', 
       val2: 'val2', 
       val3: [{a:12, b:13}], 
       val4: {c:23, d:56} 
     }; 

     self.secobj={}; 
     self.thobj={}; 
     self.forobj={}; 

     self.changeVal = function(){ 
      angular.copy(self.obj, self.secobj); 
      angular.extend(self.thobj, self.obj); 
      angular.merge(self.forobj, self.obj); 
      self.obj.val1 = 'value 1'; 
      self.obj.val2 = 'value 2'; 
      self.obj.val3[0].a = 11223; 
      self.obj.val3[0].b = 22334; 
      self.obj.val4.c = 1000; 
      self.obj.val4.d = 5555; 
     }; 


    }]); 
</script> 

答えて

1

私はこの上でより多くの洞察を得るためにgithubのに利用できるangularjsのソースコードを見ました。

Angular.copyは、オブジェクトの複製を送信元から送信先に単純に行います。そのプロセスでは、すべてのオブジェクトを宛先オブジェクトから削除し、次にソースからプロパティをコピーします。

一方、mergeはソースオブジェクトを宛先に追加します。したがって、宛先オブジェクトにすでにいくつかの要素がある場合、その要素はそこに残り、ソースオブジェクトの新しいプロパティが宛先オブジェクトに追加されます。さらに、マージは複数のソースオブジェクトをサポートしています。複数のソースオブジェクトは、それらをデスティネーションオブジェクトに追加できます。

関連する問題