轉自st.gg 為什麼用 $scope.user = $scope.master; $scope.master 會跟著 $scope.user 改變?angular.copy 和 = 號賦值有什麼區別呢?新手還沒有搞懂,請教各位了。 你可以這麼來理解: 記憶體里有一段地址儲存了 { firstName ...
轉自st.gg
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> <div 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> </div> <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>
你可以這麼來理解:
-
記憶體里有一段地址儲存了
{ firstName: "John", lastName: "Doe" }
這個數據,並且最開始用$scope.master
指向了它 -
當你
$scope.user = $scope.master
的時候,事實上是讓二者同時指向了該數據,因此一個變了另外一個也會跟著變 -
當你
$scope.user = angular.copy($scope.master)
的時候,先做了一份該數據的拷貝(也就是記憶體中多了另外一份數據,值是一樣的,但地址肯定不同),然後讓$scope.user
指向了這份拷貝,所以二者指向了不同的記憶體地址,當然不會相互影響了。
記住,這並非 Angular 的特殊情況,而是編程語言的通用基礎。
其實就是一個是拷貝數據,一個是拷貝引用。無論何種編程語言都會有這個問題,所以就會有深拷貝這種概念。
因為項目著急,要用angular.js,修改老是修改出錯,都快瘋掉了,修改方法還沒寫,只是動了動數據,數據的屬性全變了。唉。加油吧。