1. 程式人生 > >Angular.js 中 copy 賦值與 = 賦值 區別

Angular.js 中 copy 賦值與 = 賦值 區別

特殊 ng-click ext 什麽 doc date bsp tro 影響

轉自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>

你可以這麽來理解:

  1. 內存裏有一段地址儲存了 { firstName: "John", lastName: "Doe" } 這個數據,並且最開始用 $scope.master指向了它

  2. 當你 $scope.user = $scope.master 的時候,事實上是讓二者同時指向了該數據,因此一個變了另外一個也會跟著變

  3. 當你 $scope.user = angular.copy($scope.master) 的時候,先做了一份該數據的拷貝(也就是內存中多了另外一份數據,值是一樣的,但地址肯定不同),然後讓 $scope.user 指向了這份拷貝,所以二者指向了不同的內存地址,當然不會相互影響了。

記住,這並非 Angular 的特殊情況,而是編程語言的通用基礎。

其實就是一個是拷貝數據,一個是拷貝引用。無論何種編程語言都會有這個問題,所以就會有深拷貝這種概念。

因為項目著急,要用angular.js,修改老是修改出錯,都快瘋掉了,修改方法還沒寫,只是動了動數據,數據的屬性全變了。唉。加油吧。

Angular.js 中 copy 賦值與 = 賦值 區別