2017-08-23 82 views
0

我想知道是否有任何差異。angular.copy()和Object.assign()之間的區別是什麼?

我可以看到Object.assign()只是克隆對象,並且這樣做,無論我是否更改原始對象,克隆的對象都會保留其值。

不過,我看到函數不被複制,只有枚舉屬性。

angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']); 
 
angular.module('ui.bootstrap.demo').controller('myCtrl', function($scope, $log) { 
 
    $scope.obj1 = { 
 
    prop1:() => "a string", 
 
    prop2: [1, 2, 3], 
 
    prop3: new Date(), 
 
    prop4: { 
 
     a: 1 
 
    } 
 
    }; 
 
    $scope.obj2 = { 
 
    "$scope.obj1": $scope.obj1, 
 
    "angular.copy Obj1": angular.copy($scope.obj1) 
 
}; 
 

 
$scope.angularClone = angular.copy($scope.obj1); 
 
$scope.es6clone = Object.assign({}, $scope.obj1) ; 
 
$scope.obj1.prop2= "newProp2" 
 
$scope.obj1 = "destroyed obj1"; 
 

 
});
<!doctype html> 
 
<html ng-app="ui.bootstrap.demo"> 
 

 
<head> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"></script> 
 
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script> 
 
</head> 
 

 
<body> 
 

 
    <div ng-controller="myCtrl"> 
 
    <h3>obj1</h3> {{obj1}} 
 
    <hr> 
 
    <h3>obj2</h3> {{obj2}} 
 
    <hr> 
 
    <h3>angularClone</h3> {{angularClone}} 
 
    <hr> 
 
    <h3>es6clone</h3> {{es6clone}} 
 
    <hr> 
 
    </div> 
 
</body> 
 

 
</html>

+0

看到這個職位的SO:https://stackoverflow.com/questions/29749433/difference-between-angular-copy-and-任務 – rrd

+0

我已經看到它,但在片段中,您可以看到行爲不同於明確的任務 –

回答

2

因此,主要的區別在於angular.copy將做深拷貝和Object.assign不會去做。試着在你的榜樣運行下面的代碼:

$scope.angularClone = angular.copy($scope.obj1); 
$scope.angularClone.prop4.a = 5; 
$scope.obj1.prop4.a; // Will return 1 

$scope.es6clone = Object.assign({}, $scope.obj1) ; 
$scope.es6clone.prop4.a = 4; 
$scope.obj1.prop4.a; // Will return 4 because object assign doesn't create deep copy. 
相關問題