2017-08-23 79 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. 
相关问题