一、浅拷贝:

拷贝就是复制,就相当于把一个对象中的所有内容,复制一份给另一个对象,直接复制,

或者说,就是把一个对象的地址给了另外一个对象,他们的指向相同,两个对象之间有相同的属性或者方法,都可以使用

    <script>
var obj1={
age:24,
sex:"男",
name:"Eric"
}
var obj2={};
//定义一个函数,把a对象中的所有属性复制到对象b中
function extend(a,b){
for(var key in a){
b[key]=a[key];
}
}
extend(obj1,obj2);
console.log(obj2.name);//Eric
console.log(obj2.sex);//男
console.log(obj2.age);//24
</script>

二、深拷贝:

拷贝还是复制,"深"是把一个对象中所有的属性或者方法,一个一个的复制,
并且在另外一个对象中开辟相应的空间,一个一个的存储到另外一个对象中
    <script>
var obj1={
age:25,
sex:"男",
car:["奥迪","特斯拉","五菱"],
dog:{
name:"小白",
age:6,
color:"黄色"
}
};
var obj2={};
//通过函数,把对象a中的所有数据拷贝到对象b中
function extend(a,b){
for(var key in a){
//先获取a对象中每个属性的值
var item=a[key];
//判断这个值是不是数组
if(item instanceof Array){
//如果是数组,在对象b中添加一个新的属性,并且这个属性值也是数组
b[key]=[];
//调用这个方法,把a对象的这个数组的属性值一个一个的复制到b对象这个数组属性中
extend(item,b[key]);
}else if(item instanceof Object){//判断这个值是不是对象类型的
//如果是对象类型的,那么在b对象中添加一个属性,也是对象
b[key]={};
//调用这个方法,把a对象中的属性对象的值.一个一个的复制到b对象的这个属性对象中
extend(item,b[key]);
}else{
//如果是普通的数据,直接复制到b对象这个属性中
b[key]=item;
}
}
}
extend(obj1,obj2);
console.dir(obj2);//见下图
</script>

三、遍历DOM树:

1、代码:

    <div>
<!-- 遍历DOM树 -->
<h1></h1>
<p>
<span></span>
<span></span>
</p>
</div>
<ul>
<li>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
</li>
<li></li>
<li></li>
</ul>
<script>
//获取页面中的根节点---根标签
var root=document.documentElement;//html
//根据根节点,调用fn的函数,显示的是根节点的名字
function forDOM(root1){
//调用f1,显示的是节点的名字
f1(root1);
//获取根节点所有的子节点
var children=root1.children;
//调用遍历所有子节点的函数
forChildren(children);
}
//给我子节点,把子节点的所有子节点显示出来
function forChildren(children){
//遍历所有的子节点
for(var i=0;i<children.length;i++){
//每个子节点
var child=children[i];
//显示每个子节点的名字
f1(child);
//判断child下面有没有子节点,如果有子节点,那么就继续遍历
child.children&&forDOM(child);
}
}
function f1(root){
console.log("节点名字:======"+root.nodeName);
}
forDOM(root);
</script>

2、思路

最新文章

  1. java源代码跟踪
  2. Html/Css(新手入门第三篇)
  3. js截取文件的名称
  4. Control Flow
  5. ORA-12154的原因
  6. 根据文字返回Label高度
  7. AlphaToCoverage solution
  8. Linux开发工具之gdb(上)
  9. 如何从Linux系统中获取带宽、流量网络数据
  10. UltraEdit中java代码换行问题
  11. shiro自定义Realm
  12. JAVA并发包学习
  13. 创建一个dynamics 365 CRM online plugin (十) - Isolation mode or trust mode
  14. WPS Office手机版调用接口代码指导帖之二 [复制链接]
  15. js增加、删除、替换DOM对象
  16. kubectl windows
  17. 团队作业(五)-笔记app top5
  18. Unity导入3D模型的过程与方法
  19. 简单理解AOP(面向切面编程)
  20. wpf expender 展开动画

热门文章

  1. C#进阶系列——WebApi异常处理解决方案
  2. .net core 杂记:用Autofac替换内置容器
  3. Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
  4. J.U.C之AQS:同步状态的获取与释放
  5. 预编译And作用域链
  6. JavaScript常用节点类型
  7. [LeetCode] 45. Jump game II ☆☆☆☆☆(跳跃游戏 2)
  8. Nginx的反向代理和负载均衡服务
  9. 【robotframework】robotframework基本使用
  10. Proxy源代码分析--谈谈如何学习Linux网络编程