extend
angular.extend(dst, src);
說明:
依次將第二個(gè)參數(shù)及后續(xù)的參數(shù)的第一層屬性(不管是簡(jiǎn)單屬性還是對(duì)象)拷貝賦給第一個(gè)參數(shù)的第一層屬性,即如果是對(duì)象,則是引用的是同一個(gè)對(duì)象,并返回第一個(gè)參數(shù)對(duì)象。src可以有多個(gè)。
angular.extend返回dst的引用。如下圖,修改了temp中某個(gè)值,dst中同樣會(huì)變。
不是深拷貝,多個(gè)src時(shí),后續(xù)的src會(huì)覆蓋前面src中存在的相同<strong>對(duì)象</strong>。如下圖,src2中的c會(huì)覆蓋src中的c。對(duì)象完全覆蓋,不會(huì)考慮對(duì)象里面的值。
Note: Keep in mind that angular.extend
does not support recursive merge (deep copy). Use angular.merge
for this.
代碼:
$scope.src = {
a: 'A',
b: 'B',
c: {
d: 'D',
e: {
f: 'F'
}
}
};
$scope.src2 = {
c: {
src2: 'D',
e: {
src2: 'src2',
f: 'F'
}
}
};
$scope.dest = {
A: 'a'
};
$scope.temp = angular.extend($scope.dest, $scope.src, $scope.src2);
$scope.change = function(){
$scope.temp.A = 'changed';
}
效果:
src: {"a":"A","b":"B","c":{"d":"D","e":{"f":"F"}}}
src2: {"c":{"src2":"D","e":{"src2":"src2","f":"F"}}}
temp: {"A":"a","a":"A","b":"B","c":{"src2":"D","e":{"src2":"src2","f":"F"}}}
dest: {"A":"a","a":"A","b":"B","c":{"src2":"D","e":{"src2":"src2","f":"F"}}}
點(diǎn)擊button后:
src: {"a":"A","b":"B","c":{"d":"D","e":{"f":"F"}}}
src2: {"c":{"src2":"D","e":{"src2":"src2","f":"F"}}}
temp: {"A":"changed","a":"A","b":"B","c":{"src2":"D","e":{"src2":"src2","f":"F"}}}
dest: {"A":"changed","a":"A","b":"B","c":{"src2":"D","e":{"src2":"src2","f":"F"}}}
merge
angular.merge(dst, src);
說明:
和extend的區(qū)別就是merge是深拷貝。
如下圖,在extend中,src中的c對(duì)象會(huì)被src2中的c對(duì)象覆蓋;在merge中,會(huì)將兩個(gè)源中的對(duì)象都拷貝,如src中c對(duì)象中的d,如果兩個(gè)源中存在相同對(duì)象,并且相同對(duì)象中存在相同key,key對(duì)應(yīng)的值會(huì)被后者覆蓋。
代碼:
$scope.src = {
a: 'A',
b: 'B',
c: {
d: 'D',
e: {
f: 'F'
}
}
};
$scope.src2 = {
c: {
src2: 'D',
e: {
src2: 'src2',
f: 'FFFFF'
}
}
};
$scope.dest = {
A: 'a'
};
$scope.temp = angular.merge($scope.dest, $scope.src, $scope.src2);
$scope.change = function(){
$scope.temp.A = 'changed';
}
效果:
src: {"a":"A","b":"B","c":{"d":"D","e":{"f":"F"}}}
src2: {"c":{"src2":"D","e":{"src2":"src2","f":"FFFFF"}}}
temp: {"A":"a","a":"A","b":"B","c":{"d":"D","e":{"f":"FFFFF","src2":"src2"},"src2":"D"}}
dest: {"A":"a","a":"A","b":"B","c":{"d":"D","e":{"f":"FFFFF","src2":"src2"},"src2":"D"}}
點(diǎn)擊button后
src: {"a":"A","b":"B","c":{"d":"D","e":{"f":"F"}}}
src2: {"c":{"src2":"D","e":{"src2":"src2","f":"FFFFF"}}}
temp: {"A":"changed","a":"A","b":"B","c":{"d":"D","e":{"f":"FFFFF","src2":"src2"},"src2":"D"}}
dest: {"A":"changed","a":"A","b":"B","c":{"d":"D","e":{"f":"FFFFF","src2":"src2"},"src2":"D"}}