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 正则表达式对象 ...
随机推荐
- ROS知识(14)----局部避障的动态窗口算法(DWA)及其调试的方法
Dynamic Window Approach(DWA)是重要的局部轨迹规划算法,ROS中使用了DWA算法获得了很好的局部路径规划的效果.具体的教程可参考官方的导航调试资料Navigation Tun ...
- JavaScript Promises
上篇文章介绍了JavaScript异步机制,请看这里. JavaScript异步机制带来的问题 JavaScript异步机制的主要目的是处理非阻塞,在交互的过程中,会需要一些IO操作(比如Ajax请求 ...
- php-curl小记
用jQuery: $.ajax({ url:url, type:"POST", data:data, contentType:"application/json; cha ...
- 如何让WCF服务更好地支持Web Request和AJAX调用
WCF的确不错,它大大地简化和统一了服务的开发.但也有不少朋友问过我,说是在非.NET客户程序中,有何很好的方法直接调用服务吗?还有就是在AJAX的代码中(js)如何更好地调用WCF服务呢? 我首先比 ...
- CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...
- [转载] 关于matlab GUI的一点心得
转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行 ...
- Js 日期加减天数
<SCRIPT language="javascript"> function addDate(dd,dadd){ var a = new Date(dd) a = a ...
- 在VirtualBox中为已有的磁盘增加磁盘大小
①打开CMD,进入到具体虚拟机镜像的存放位置. ②输入命令:VBoxManage modifyhd uuid --resize 25000,这里的25000单位是M,表示修改后的硬盘大小.若是VBox ...
- Derby设置密码教程
方法一: 配置derby.propertites文件: 文件内容: derby.connection.requireAuthentication=truederby.authentication ...
- 聊聊clean code
clean code,顾名思义就是整洁的代码,或者说清晰.漂亮的代码,相信大多数工程师都希望自己能写出这样的代码. 也许这是个千人千面的话题,每个工程师都有自己的理解.比如我,从一个天天被骂代码写得烂 ...