美文网首页
面向对象(十)深拷贝和浅拷贝

面向对象(十)深拷贝和浅拷贝

作者: 凸小布 | 来源:发表于2017-02-26 16:18 被阅读12次

title: 面向对象(十)深拷贝和浅拷贝
date: # 文章生成时间,一般不改
categories: # 文章分类目录,可省略
- 面向对象
tags: # 文章标签,可省略
- 面向对象
- 基于原型面向对象的继承 # 个数不限,单个可直接跟在 tags 后面


深拷贝

  • 提供一个函数,两个参数(元对象,要拷贝属性的对象)
  • 在函数中先检查第一个参数是否有值,如果没有值那么就初始化一个空的对象
  • for..in循环来遍历参数2,
  • 检查当前的属性值是什么类型
  • 如果是值类型,那么就直接拷贝赋值
  • 如果是引用类型,那么就再调用一次这个方法,去内部拷贝这个对象的所有属性
<script  >
    var obj = {
        name:"小花脸",
        car:{
            type:"客车",
        },
        friends:["1","2","3"]
    };

    //判断某个对象是否是一个数组(Array.isArray())
    //兼容性问题:ES5
    //先判断是isArray方法是否存在,如果不存在那么就自己为Array创建一个isArray方法
    if(typeof Array.isArray != "function") {
        Array.isArray = function(obj){
            return Object.prototype.toString.call(obj) == "[object Array]";
        }
    }

    var o = {};
    //deepCopy(o,obj);
    function deepCopy(obj1,obj2) {
        obj1 = obj1 || {};
        for (var i in obj2)
        {
            if (obj2.hasOwnProperty(i))
            {
                if( typeof obj2[i] == "object")
                {
                    //判断是数组还是对象
                    obj1[i] = Array.isArray(obj2[i])?[]:{};
                    //引用类型
                    deepCopy(obj1[i],obj2[i]);   //函数调用
                }else
                {
                    //值类型
                    obj1[i] = obj2[i];
                }
            }
        }
    }

    deepCopy(o,obj);
    console.log(o);

    //共享问题
    //o.car.type = "小货车";
    console.log(obj);
</script>

相关文章

  • 面向对象(十)深拷贝和浅拷贝

    title: 面向对象(十)深拷贝和浅拷贝date: # 文章生成时间,一般不改categories: ...

  • 2018-10-10函数基础

    深拷贝和浅拷贝 深拷贝 copy.deepcopy(对象)浅拷贝 copy.copy(对象)深拷贝: 将对象对应的...

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

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

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

  • day 9

    浅拷贝和深拷贝 copy.copy(对象):浅拷贝 copy.deepcopy(对象):深拷贝 copy.copy...

  • 五、面试总结(五)

    对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方...

  • Cloneable 接口

    浅拷贝(shallow clone)和深拷贝(deep clone) 浅拷贝是指拷贝对象时仅仅拷贝对象本身和对象中...

  • 浅拷贝和深拷贝与(基本复杂类型)数组去重

    对象浅拷贝和深拷贝 //浅拷贝 //深拷贝 所有继承了 Object 的对象都会继承到 hasOwnPropert...

  • day9-函数基础

    一、浅拷贝和深拷贝 import copycopy.copy(对象):浅拷贝copy.deepcopy(对象):深...

  • iOS 中 load 和 initialize 方法调用机制

    深拷贝和浅拷贝 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生...

网友评论

      本文标题:面向对象(十)深拷贝和浅拷贝

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