美文网首页程序开发设计
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