zoukankan      html  css  js  c++  java
  • 拷贝和遍历DOM树

    一、浅拷贝:

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

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

        <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、思路

  • 相关阅读:
    atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    atitit。企业的价值观 员工第一 vs 客户第一.docx
    Atitit 实现java的linq 以及与stream api的比较
    Atitit dsl exer v3 qb3 新特性
    Atititi tesseract使用总结
    Atitit 修改密码的功能流程设计 attilax总结
    atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx
  • 原文地址:https://www.cnblogs.com/EricZLin/p/9083679.html
Copyright © 2011-2022 走看看