Maison  >  Questions et réponses  >  le corps du texte

javascript - Angular.js 中 copy 赋值与 = 赋值 区别

为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.user 改变?angular.copy 和 = 号赋值有什么区别呢?新手还没有搞懂,请教各位了。

<!DOCTYPE html>
<html>
<script src= "http://apps.bdimg.com/libs/angular.js/1.3.9/angular.min.js"></script>
<body>

<p ng-app="myApp" ng-controller="formCtrl">
  <form novalidate>
    First Name:<br>
    <input type="text" ng-model="user.firstName"><br>
    Last Name:<br>
    <input type="text" ng-model="user.lastName">
    <br><br>
    <button ng-click="reset()">RESET</button>
  </form>
  <p>form = {{user }}</p>
  <p>master = {{master}}</p>
</p>

<script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
    $scope.master = {firstName:"John", lastName:"Doe"};
    $scope.reset = function() {
        $scope.user = angular.copy($scope.master);
        // 为什么用 $scope.user = $scope.master; master跟着user改变
    };
    $scope.reset();
});
</script>

</body>
</html>
黄舟黄舟2771 Il y a quelques jours443

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-04-10 16:40:20

    你可以这么来理解:

    1. 内存里有一段地址储存了 { firstName: "John", lastName: "Doe" } 这个数据,并且最开始用 $scope.master 指向了它

    2. 当你 $scope.user = $scope.master 的时候,事实上是让二者同时指向了该数据,因此一个变了另外一个也会跟着变

    3. 当你 $scope.user = angular.copy($scope.master) 的时候,先做了一份该数据的拷贝(也就是内存中多了另外一份数据,值是一样的,但地址肯定不同),然后让 $scope.user 指向了这份拷贝,所以二者指向了不同的内存地址,当然不会相互影响了。

    记住,这并非 Angular 的特殊情况,而是编程语言的通用基础。

    répondre
    0
  • 迷茫

    迷茫2017-04-10 16:40:20

    其实就是一个是拷贝数据,一个是拷贝引用。无论何种编程语言都会有这个问题,所以就会有深拷贝这种概念。

    répondre
    0
  • Annulerrépondre