拷贝和遍历DOM树
2024-09-28 02:27:23
一、浅拷贝:
拷贝就是复制,就相当于把一个对象中的所有内容,复制一份给另一个对象,直接复制,
或者说,就是把一个对象的地址给了另外一个对象,他们的指向相同,两个对象之间有相同的属性或者方法,都可以使用
<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、思路
最新文章
- java源代码跟踪
- Html/Css(新手入门第三篇)
- js截取文件的名称
- Control Flow
- ORA-12154的原因
- 根据文字返回Label高度
- AlphaToCoverage solution
- Linux开发工具之gdb(上)
- 如何从Linux系统中获取带宽、流量网络数据
- UltraEdit中java代码换行问题
- shiro自定义Realm
- JAVA并发包学习
- 创建一个dynamics 365 CRM online plugin (十) - Isolation mode or trust mode
- WPS Office手机版调用接口代码指导帖之二 [复制链接]
- js增加、删除、替换DOM对象
- kubectl windows
- 团队作业(五)-笔记app top5
- Unity导入3D模型的过程与方法
- 简单理解AOP(面向切面编程)
- wpf expender 展开动画
热门文章
- C#进阶系列——WebApi异常处理解决方案
- .net core 杂记:用Autofac替换内置容器
- Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
- J.U.C之AQS:同步状态的获取与释放
- 预编译And作用域链
- JavaScript常用节点类型
- [LeetCode] 45. Jump game II ☆☆☆☆☆(跳跃游戏 2)
- Nginx的反向代理和负载均衡服务
- 【robotframework】robotframework基本使用
- Proxy源代码分析--谈谈如何学习Linux网络编程