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 正则表达式对象 ...
随机推荐
- MacBook pro new 触控板手势及快捷键
MacBook pro new 触控板手势: 显示桌面: 拇指+三指 向外张开 launchpad: 拇指+三指 向中间集中 正在运行的窗口:三指向上 应用浏览: 三指向下 窗口信息: 三指点 ...
- MySQL Innodb 存储引擎学习篇
master thread的县城优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环(background loop).刷新循环(flush loop).暂停循环(suspen ...
- MySQL增强版命令行客户端连接工具(mycli)
效果: 安装: http://www.mycli.net/install 官网: http://www.mycli.net/install
- gcc 内联汇编
http://www.cnblogs.com/zhuyp1015/archive/2012/05/01/2478099.html
- Solaris10 下mysql5.5.12的安装
http://blog.csdn.net/ocean20/article/details/6417845 http://howtolamp.com/lamp/mysql/5.6/installing/
- DevExpress RichEditControl 上下翻页功能 z
/// <summary> /// 翻页 /// </summary> /// <param name="isPre"></param&g ...
- EF三种加载方法
EF性能之关联加载 鱼和熊掌不能兼得 ——中国谚语 一.介绍 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和 ...
- UML九种图 之 用例图和类图
前言 近期写UML文档,看视频的时候感觉掌握的还能够,当真正写文档的时候才发现不是一件easy的事.写文档自己又翻开自己的笔记看了一遍又一遍. 以下就给大家介绍一下我画的几张图: 用例图 ...
- Caused by: org.xml.sax.SAXParseException: The reference to entity "characterEncoding" must end with the ';' delimiter.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Sourc ...
- python文章学习列表
1.https://home.cnblogs.com/u/darkpig/feed/blog/ 这篇博主的系列文章 2.