美文网首页程序开发设计
javascript 浅拷贝/深拷贝 几种写法

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

作者: 丶梵天 | 来源:发表于2016-04-15 17:45 被阅读276次
/**
     * 继承方法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;
    }

相关文章

网友评论

    本文标题:javascript 浅拷贝/深拷贝 几种写法

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