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

  • 相关阅读:
    MVC3中输出Html标签的方法
    Server.MapPath 出现未将对象引用设置到对象的实例
    谈谈网站静态化
    WCF 服务应用程序与 服务库之间的区别
    插入中国所有省和市的SQL语句--以后用
    KiCad 元件值 F4NNIU 规范 (2020-04-30)[31.98%]
    FastAdmin 安装后点登录没有反应怎么办?
    笔记:读英国老太太的复仇计划 (2019-10-15)
    KiCad 工程用 Git 管理需要忽略哪些文件?
    关于 SSD 的接口和相关名词(2019-09-10)
  • 原文地址:https://www.cnblogs.com/historylyt/p/7780131.html
Copyright © 2020-2023  润新知