javascript---对象和函数的引用、浅拷贝、深拷贝、递归
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---对象和函数的引用、浅拷贝、深拷贝、递归的更多相关文章
- Python__学习路上的坑之--引用,浅拷贝,深拷贝
copy : 相当于只是拷贝表面一层,如果里面还有深层次的引用,那么也是直接拷贝引用的地址,而且如果拷贝对象是不可变类型比如元组,那么也是直接拷贝引用. deepcopy: 无论是拷贝可变类型还是不可 ...
- javascript 对象,函数,原型和 this
1.对象 在javascript里,一切都是对象,包括函数自身(不是指具体的函数,而是指"Function"这个东东).例如: var fun1=new Function(&quo ...
- JavaScript对象,函数,作用域
JavaScript对象 在 JavaScript中,几乎所有的事物都是对象.JavaScript 对象是拥有属性和方法的数据. var car = {type:"Fiat", m ...
- 0620 ALT选择竖排 虚函数的优缺点 浅拷贝深拷贝 操作系统
1.word按住ALT可以选择整列文字 2.虚函数优点:http://blog.163.com/jianhuali0118@126/blog/static/3774997020083610434091 ...
- javascript 对象的创建,引用,释放,删除方法
1.用函数构造 A.声明时同时设置属性和方法 function func(){ this.name = "myname"; this.say = function(){aler ...
- JavaScript 对象与函数
对象参考手册 Array Boolean Date Math Number String RegExp Global 前言 在js中什么都是对象(包括函数). 函数是用来实现具体功能的代码,用一种方式 ...
- javascript对象和函数的几种常见写法
/** * Created by chet on 15/12/17. */ var En= function (button,func) { //dosth,不能return alert(button ...
- JavaScript对象、函数、变量、字符串的处理、运算符
一.对象 使用一种抽象的概念去描述,人{属性,方法} var car={type:"BYD",model:500,color:white,do:function(){"可 ...
- JavaScript对象简介(一)
本节介绍js的9个对象:Array数组对象 Boolean(true false) Date日前对象 Math 数学对象 Number 数字对象 String 字符串对象 RegExp 正则表达式对象 ...
随机推荐
- 【转】Spring中事务与aop的先后顺序问题
[原文链接] http://my.oschina.net/HuifengWang/blog/304188 [正文] Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟sp ...
- GDB高级用法
http://blog.csdn.net/wwwsq/article/details/7086151
- XCL-Charts画曲线图(CurveChart) 例2
还有一个横向的曲线图(CurveChart) 效果: 代码: //图基类 chart = new CurveChart(); //图所占范围大小 chart.setChartRange(0, 0, t ...
- 跟我学AngularJs:AngularJs入门及第一个实例
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:主要给大家介绍了AngularJs及其特性,并以3个实例来做说明. 本教程使用Angul ...
- [转载] java的书
1. Java 语言基础 谈到Java 语言基础学习的书籍,大家肯定会推荐Bruce Eckel 的<Thinking in Java >.它是一本写的相当深刻的技术书籍,Java 语言基 ...
- VC++ 改动VMware BIOS、uuid_location、ethernet0_address等
VC++ 改动VMware BIOS.uuid_location.ethernet0_address等.主要问题例如以下 (1)随机产生16进制数. (2)改动vmx相应项.依据规则一般仅仅改动最后三 ...
- hdu 1242 Rescue(BFS入门)
第一次用容器做的BFS题目,题目有个地方比较坑,就是遍历时的方向,比如上下左右能AC,右上左下就WA #include <stdio.h> #include <string.h> ...
- iOS开发-UI基础Demo
现在更多的学习资料都是xCode4.X的,发现xCode6.1还是很多东西,如果有正在学习iOS开发的可以通过Demo简单了解下iOS的UI开发~ 1.新建单视图文件: 2.新建项目名称,语言选择OC ...
- 提高你开发效率的十五个 Visual Studio 使用技巧
相信做开发的没有不重视效率的.开发C#,VB的都知道,我们很依赖VS,或者说,我们很感谢VS.能够对一个IDE产生依赖,说明这个IDE确实 有它的独特之处.无容置疑,VS是一个非常强大的IDE,它支持 ...
- scala 学习笔记一 列表List
1.介绍 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是.. 列表的元素类型 ...