zoukankan      html  css  js  c++  java
  • (网页)Angular.js 中 copy 赋值与 = 赋值 区别

    转自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,修改老是修改出错,都快疯掉了,修改方法还没写,只是动了动数据,数据的属性全变了。唉。加油吧。

  • 相关阅读:
    C++ 将对象写入文件 并读取
    IronPython fail to add reference to WebDriver.dll
    How to Capture and Decrypt Lync Server 2010 TLS Traffic Using Microsoft Tools
    .net code injection
    数学系学生应该知道的十个学术网站
    Difference Between Currency Swap and FX Swap
    Swift开源parser
    谈谈我对证券公司一些部门的理解(前、中、后台)[z]
    JDK8记FullGC时候Metaspace内存不会被垃圾回收
    JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]
  • 原文地址:https://www.cnblogs.com/historylyt/p/7780131.html
Copyright © 2011-2022 走看看