javascript 浅拷贝/深拷贝 几种写法

/**
     * 继承方法1 浅拷贝
     * @param  {[type]} obj [父对象]
     * @return {[type]}     [返回新对象]
     */
    function cloneObj(obj){  
        var F = function() {};  
        F.prototype = obj;  
        return new F();   
    }

    /**
     * 继承方法2 浅拷贝
     * @param  {[type]} obj [父对象]
     * @return {[type]}     [返回新对象]
     */
    function extend(obj) {
        var newObj = {};
        for(attr in obj){
            newObj[attr] = obj[attr];
        }
        return newObj;
    }

    /**
     * 继承方法3 浅拷贝
     * @param  {[type]} superObj [父对象]
     * @param  {[type]} subObj   [子对象]
     * @return {[type]}          [返回新对象]
     */
    function extend(superObj, subObj) {
        var subObj = subObj || {};
        for(prop in superObj){
            subObj[prop] = superObj[prop];
        }
        return subObj;
    }

    /**
     * 继承方法3 深拷贝 递归
     * @param  {[type]} superObj [父对象]
     * @param  {[type]} subObj   [子对象]
     * @return {[type]}          [返回新对象]
     */
    function extendDeeply(superObj, subObj) {
        var subObj = subObj || {};
        for(prop in superObj){
            if(typeof superObj[prop] == "object") {
                superObj[prop] = (superObj[prop].construtor === Array) ? [] : {};
                extendDeeply(superObj[prop], superObj[prop]);
            }else{
                subObj[prop] = superObj[prop];
            }
        }
        return subObj;
    }

   /**
     * 继承方法4 深拷贝 递归方式2
     * @param  {[type]} obj [拷贝对象]
     * @return {[type]}     [返回新对象]
     */
    function deepCopy(obj) {
        if( typeof obj != 'object' ) {
            return obj;
        }
        var newObj = {};
        for(var attr in obj) {
            newObj[attr] = deepCopy(obj[attr]);
        }
        return newObj;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简述 -在面试中经常被问到深拷贝(深复制)和浅拷贝(浅复制),下面就对其进行简单的说明一下。-浅拷贝:在使用Jav...
    诺奕阅读 1,474评论 6 6
  • 在工作中会遇到各式各样的与深拷贝浅拷贝相关的问题,其实造成这类问题的根本原因是javascript中,不同的数据类...
    小梁姐姐阅读 314评论 0 1
  • js里面有一个数据类型为object(如json和数组),它创建的是一块内存区域,存放的是一个地址,所以当你直接将...
    bc63f6792451阅读 464评论 0 0
  • 出场人物:阿一、叶小蝶、姜太公、马氏、吕雉、戚夫人、赵飞燕、武则天、慈禧、魏忠贤 文 | 不写诗了 天气阴阴沉沉,...
    不写诗了阅读 1,787评论 6 51
  • 第一幕 初见 战火纷飞,四处是荒芜的田地,满目疮痍的民宿,远处有黑鸦,在枯枝干上停歇。 两国交战,百姓凋零,还未有...
    落英冰封阅读 834评论 4 8