美文网首页
JS高级-浅拷贝、深拷贝

JS高级-浅拷贝、深拷贝

作者: 哎呦呦胖子斌 | 来源:发表于2018-11-20 16:21 被阅读0次

浅拷贝:拷贝就是复制,就相当于把一个对象中的所有内容复制一份给另一个对象,直接复制,或者说,就是把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或方法,都可以使用。
把一个对象中的属性复制到另一个对象中
// 浅拷贝

   function extend(obj1,obj2){
    for(var key in obj1){
        obj2[key] = obj1[key];
    }
   }

        如果拷贝的对象中有属性是数组或者是对象,那么拷贝过来的是属性对应的地址,也就是说,如果更改了这个属性对应的值,拷贝过去的对象值也会做相应的更改。
深拷贝:给每一个属性值开辟了一个新的空间用来存储,更改对象对拷贝后的对象不会有影响。
// 深拷贝

    function extend2(Obj1, Obj2) {
        for (var key in Obj1) {
            var item = Obj1[key]
            if (item instanceof Array) {
                Obj2[key] = [];
                extend2(item, Obj2[key]);
            } else if (item instanceof Object) {
                Obj2[key] = {};
                extend2(item, Obj2[key]);
            } else {
                Obj2[key] = Obj1[key];
            }
        }
    }

一个栗子

    var a = {
        age:10,
        name:'小李',
        car:['宝马','奥迪'],
        dog:{
            name:'小黄',
            eat:'狗粮'
        }
    };

    var b = {};
    extend1(a,b);
    // extend2(a,b);
    
    a.dog.name = '小红';
    a.age = 22;
    console.log(a);
    console.log(b);

        如上面的代码,如果更改a的age属性,那么不管是深拷贝还是浅拷贝,b中对应的age的值是不会改变了,但是,如果更改了a.dog.name,浅拷贝对应的b对象的b.dog.name也会做相应的改变,但是深拷贝对应的b对象就不会做改变。
一个栗子:遍历DOM树

    var root = document.documentElement;
    //根据根节点找到所有的子节点
    function forNode(root){
        var child = root.children;
        forChild(child)
    }
    //根据子节点数组,输出所有的子节点
    function forChild(childList){
        for(var i = 0;i<childList.length;i++){
            var child = childList[i];
            consNodeName(child);
            //判断某个子节点是否还有子节点,其实这个地方我觉得可以直接调用forChild(child.children)
            child.children&&forNode(child);
        }
    }
    //根据节点,显示该节点
    function consNodeName(child){
        console.log(child.nodeName);
    }
    forNode(root);

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • JS高级-浅拷贝、深拷贝

    浅拷贝:拷贝就是复制,就相当于把一个对象中的所有内容复制一份给另一个对象,直接复制,或者说,就是把一个对象的地址给...

  • JS实现深拷贝、instanceof、判断是否为数组

    JS深拷贝 JS中拷贝对象可以按照拷贝的程度可以分为浅拷贝和深拷贝,有些时候我们需要拷贝之后的对象和拷贝之前的对象...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • 2020前端高频面试题总结(附答案)

    [ js基础题 ] 1. new的实现原理是什么? 2. 深拷贝和浅拷贝的区别是什么 深拷贝 浅拷贝 3. bin...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

网友评论

      本文标题:JS高级-浅拷贝、深拷贝

      本文链接:https://www.haomeiwen.com/subject/mpsxqqtx.html