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

最新文章

  1. 【转】Eclipse打JAR包,插件FatJar安装与使用
  2. github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端
  3. 【考试】简单的sql语句
  4. 配置tomcat时踩过的坑
  5. EXTJS 3.0 资料 控件之 FormPanel 插入button用法
  6. CSS和JS样式属性对照表
  7. WebService基于SoapHeader实现安全认证(一)
  8. Cmake find_package()相关
  9. Apriori算法
  10. CentOS 5 安装Oracle10g
  11. initWithNibName与viewDidLoad的执行关系以及顺序
  12. WPF 实现验证码功能
  13. Web桌面应用框架3:Web桌面应用开发的N种Style
  14. 笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)
  15. 关于 frame的一些基本知识
  16. linux基础命令用法
  17. Running Tensorflow on AMD GPU
  18. 删除API
  19. asp.net core 通过ajax调用后台方法(非api)
  20. javascript中 json数据的解析与序列化

热门文章

  1. 移动端h5页面的那些坑
  2. 使用ES6的Promise完美解决回调地狱
  3. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 3.Programming assignments:Convolutional Model: application
  4. Jenkins系列之二——centos 6.9 + JenKins 安装
  5. CountDownLatch 和 CyclicBarrier 的基本使用
  6. 六:理解控件的运行机制(例:基于WebControl命名空间的控件)
  7. Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制
  8. linux下configure,make,make install的意义
  9. S0到S5状态讲解
  10. 基于Asp.Net Core 2.1的简单问答社区系统源代码分享