1、javascript 对象和函数的引用

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>javascript 对象和函数的引用、浅拷贝、深拷贝、递归</title>
<script type="text/javascript">
//对象和函数都是对象引用的关系,a和b公用一个地址
//所以当b改变也会影响a
var a=[1,2,3];
var b=a;//同一个引用
b.push(4);
alert(b);//1 2 3 4
alert(a);//1 2 3 4 对象的引用 var a=[1,2,3];
var b=a;
b=[1,2,3,4];//b又又一次的占用了一个新地址。与之前的进行脱离了,一个新的空间
alert(b);//1 2 3 4
alert(a);// 1 2 3没有引用到 var obj={
a:10
}
var obj2=obj;
obj2.a=20;
alert(obj.a);//20 影响到了之前的对象 </script>
</head>
<body> </body>
</html>

2、浅拷贝实现:

		//浅拷贝
var obj={
a:10
}
function copy (obj) {
//复制关系。而不是引用关系
var newOBJ={};
for (var arrt in obj) {//循环复制全部属性。能够称为浅拷贝或者叫浅克隆
newOBJ[arrt]=obj[arrt];
};
return newOBJ;
} var obj2=copy(obj);
obj2.a=20;
alert(obj.a);//10

浅拷贝存在的问题:仅仅能拷贝一层

		//浅拷贝的问题:仅仅能拷贝一层
////举例验证-->
var obj={
a:{b:10}
}
function copy (obj) {
var newOBJ={};
for (var arrt in obj) {
newOBJ[arrt]=obj[arrt];
};
return newOBJ;
}
var obj2=copy(obj);
obj2.a.b=20;
alert(obj.a.b);//20

==========================================================================

3、深拷贝:(深拷贝要利用到递归知识)攻克了浅拷贝仅仅能拷贝一层的问题。

//递归(函数调用函数自身)
//推断终止条件,能够运行return动作
function jiechen (n) {
if(n==1){
console.trace();
return 1;
}
return n*jiechen(n-1);
}
alert(jiechen(4)); //4*3*2*1

深拷贝实现:

//深拷贝
var obj={
a:{b:10}
}
function deep_copy (obj) {
//利用递归的方式
var newOBJ={};
if(typeof obj!='object'){
console.trace();
return obj;//终止条件。假设不是对象就放回该值
}
for (var arrt in obj) {
newOBJ[arrt]=deep_copy(obj[arrt]);//再一次拷贝(递归)
};
return newOBJ;
} var obj2=deep_copy(obj);
obj2.a.b=20;
alert(obj.a.b);//10

javascript---对象和函数的引用、浅拷贝、深拷贝、递归的更多相关文章

  1. Python__学习路上的坑之--引用,浅拷贝,深拷贝

    copy : 相当于只是拷贝表面一层,如果里面还有深层次的引用,那么也是直接拷贝引用的地址,而且如果拷贝对象是不可变类型比如元组,那么也是直接拷贝引用. deepcopy: 无论是拷贝可变类型还是不可 ...

  2. javascript 对象,函数,原型和 this

    1.对象 在javascript里,一切都是对象,包括函数自身(不是指具体的函数,而是指"Function"这个东东).例如: var fun1=new Function(&quo ...

  3. JavaScript对象,函数,作用域

    JavaScript对象 在 JavaScript中,几乎所有的事物都是对象.JavaScript 对象是拥有属性和方法的数据. var car = {type:"Fiat", m ...

  4. 0620 ALT选择竖排 虚函数的优缺点 浅拷贝深拷贝 操作系统

    1.word按住ALT可以选择整列文字 2.虚函数优点:http://blog.163.com/jianhuali0118@126/blog/static/3774997020083610434091 ...

  5. javascript 对象的创建,引用,释放,删除方法

    1.用函数构造 A.声明时同时设置属性和方法 function func(){  this.name = "myname";  this.say = function(){aler ...

  6. JavaScript 对象与函数

    对象参考手册 Array Boolean Date Math Number String RegExp Global 前言 在js中什么都是对象(包括函数). 函数是用来实现具体功能的代码,用一种方式 ...

  7. javascript对象和函数的几种常见写法

    /** * Created by chet on 15/12/17. */ var En= function (button,func) { //dosth,不能return alert(button ...

  8. JavaScript对象、函数、变量、字符串的处理、运算符

    一.对象 使用一种抽象的概念去描述,人{属性,方法} var car={type:"BYD",model:500,color:white,do:function(){"可 ...

  9. JavaScript对象简介(一)

    本节介绍js的9个对象:Array数组对象 Boolean(true false) Date日前对象 Math 数学对象 Number 数字对象 String 字符串对象 RegExp 正则表达式对象 ...

随机推荐

  1. MySQL DB 主从复制之SSL

    需求架构 准备工作 主从服务器时间同步 # 主从服务器同时配置crontab任务,与NTP服务器同步时间即可 */5 * * * * ntpdate 172.16.0.1 &>/dev/ ...

  2. 清理IIS Express上的网站

    默认情况下,当使用Visual Studio浏览网页时,网站会被保存在IIS Express上,这些网站需要手动清理.可以通过命令行或界面进行清理. □ 通过命令行 →找到appcmd.exe在C:\ ...

  3. Unity知识结构总结

    前言 本篇以知识结构图的形式对Unity引擎的常用基础知识内容进行了总结和梳理. 如果你学了一点关于Unity引擎的知识,又觉得太杂乱,那么希望本篇会给你一些帮助. 对应引擎版本:Unity  4.6 ...

  4. FreeCMS开发过程问题总结(持续更新中)

    正在做freecms的二次开发,特对开发过程中遇到的问题及原因分析进行总结分享,共勉. 2014/4/25 错误提示:静态化处理失败,原因:Expression answerList is undef ...

  5. Spring+Quartz的版本问题

    使用Spring配置管理Quartz的时候会遇到下面的异常: Caused by: java.lang.IncompatibleClassChangeError: class org.springfr ...

  6. Java中List效率的比较

    Java Collections Framework(JCF) 是Java SE中一个基本的类集,几乎所有的项目都会用到,其中的List 则是JCF中最最常用的一个接口.围绕List 接口,有很多实现 ...

  7. SQL_DDL_建库建表

    --IF DB_ID('testdb') IS NULL --CREATE DATABASE testdb USE master GO IF EXISTS ( SELECT * FROM sys.da ...

  8. flume 日志导入elasticsearch

    Flume配置 . flume生成的数据结构 <span style="font-size:18px;">"_index" : "logs ...

  9. 应用Flume+HBase采集和存储日志数据

    1. 在本方案中,我们要将数据存储到HBase中,所以使用flume中提供的hbase sink,同时,为了清洗转换日志数据,我们实现自己的AsyncHbaseEventSerializer. pac ...

  10. Informatica 常用组件Filter之四 优化

    以下提示可提高过滤器性能: 在映射中先使用过滤器转换. 要使会话性能最忧化,应使过滤器转换尽可能靠近映射中的源.并不是将您准备放弃的行传递至映射,而是在随后从源至目标的数据流中过滤出不需要的数据. 使 ...