浅拷贝
浅拷贝: 拷贝就是复制,就相当于把一个对象中的所有内容都复制一遍给另一个对象;
就是把一个对象的地址 给了另一个对象的,他们指向相同;两个对象之间有共同的属性和方法,都可以使用.
Eg:
var obj1={
age:10,
sex:'男',
car:['奔驰','宝马','特斯拉','byd']
};
var obj2={};
// 写一个函数,作用: 把一个对象的属性复制到另一个对象中,浅拷贝
// 把a对象中的所有属性复制到对象b中
function extend(a,b){
for(var key in a){
b[key]=a[key];
}
}
extend(obj1,obj2);
console.dir(obj2);
cosnole.dir(obj1);
深拷贝 ======>递归
深拷贝: 还是复制,深:把一个对象中所有的属性或者方法,一个一个的找到,并且在另一个对象中开辟相应的空间,
一个一个的存储到另一个的对象中
var obj1={
age:10,
sex:'男',
car:['奔驰','奥迪','byd','五菱'],
dog:{
name:'二傻',
age:5,
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(obj1);
console.dir(obj2);
遍历DOM树====>递归
// 1,获取页面中的根节点
var root=document.documentElement;
// 2,函数遍历DOM树
function forDom(root1){
// console.log('节点名字'+root1.nodeName);
// 调用f1,显示节点的名字
f1(root1);
}
forDom(root); // 函数调用 传入根节点
function f1(node){
console.log('节点名字:'+node.nodeName);
}
--------------------------------------------------------------
function forDom(root1){
// console.log('节点名字'+root1.nodeName);
// 调用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);
}
}
forDom(root); // 函数调用 传入根节点
function f1(node){
console.log('节点名字:'+node.nodeName);
}
-----------------------------------------------------
function forDom(root1){
// console.log('节点名字'+root1.nodeName);
// 调用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);
}
}
forDom(root); // 函数调用 传入根节点
function f1(node){
console.log('节点名字:'+node.nodeName);
}