angular.extend vs angular.copy


1、angular.copy

 angular.copy(source, [destination]);  // source: copy的對象. 可以使任意類型, 包括null和undefined.    destination:接收的對象   返回復制或更新后的對象

如果省略了destination,一個新的對象或數組將會被創建出來;
如果提供了destination,則source對象中的所有元素和屬性都會被復制到destination中;
如果source不是對象或數組(例如是null或undefined), 則返回source;
如果source和destination類型不一致,則會拋出異常。
 
angular.copy后,改變source不會影響destination,改變destination 不會改變source
var source=[1,'source',{id:1,source:'hello'}];
var des=angular.copy(source);
source[0]=9;
source[2].source='change';
console.log(des);  //輸出des不會變化
var source=[1,'source',{id:1,source:'hello'}];
var des=angular.copy(source);
des[0]=9;
des[2].source="change";
console.log(source); //輸出source不變

 

 2、angular.extend

angular.extend(destination, source);

 復制src對象中的屬性去dst對象中. 支持多個src對象. 如果你不想改變一個對象,你可以把dst設為空對象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持遞歸復制.

 如果復制的是個基本數值,則改變source不會影響des,改變des不會影響source

var source=[1,'source',{id:1,source:'hellow'}];
var des=angular.extend(source);
source[0]=9;
source[2].source='change';
console.log(des);//des改變為和source一致
var source=[1,'source',{id:1,source:'hello'}];
var des=angular.extend(source);
des[0]=9;
des[2].source="change";
console.log(source); // source改變

 多個對象復制時

 var modalOptions = {
     closeButtonText: '取消',
     actionButtonText: '確定',
     headerText: 'Proceed?',
     bodyText: 'Perform this action?',
     backdrop:'false',
     type:'1',
     confirm:false
 };
 var customModalDefaults={
     backdrop: 'static'
 };
 var temp={};
 console.log(angular.extend(temp,modalOptions,customModalDefaults));
 console.log(temp.backdrop);// static 我猜想可能是后面的對象的相同屬性先替換前一個對象的相同屬性,然后層層迭代,再傳給目標對象  需要注意的是,雖是層層迭代,但modalOptions不會變,他的backdrop=false
 console.log(angular.extend(temp,customModalDefaults,modalOptions));
 console.log(temp.backdrop); // false 當多個源對象的屬性不沖突時,就會合並一起傳給目標對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM