玩笑过后

导航

deepCopy深拷贝

function deepCopy(p,c){
            var c = c || {};
            for ( var i in p ){
                //确保属于自己的属性
                if ( p.hasOwnProperty( i ) ){
                    //判断属性是否为对象
                    if ( typeof p[i] === 'object' ){
                        //ES3没有isArray()方法,兼容写法
                        if (typeof Array.isArray !== 'function' ){
                            Array.isArray = function( candidate ){
                                return Object.prototype.toString.call( candidate ) === '[object Array]';
                            }
                            //如果是数组创建新数组,如果不是创建新对象
                            c[i] = Array.isArray( p[i] ) ? [] : {};
                        }else {
                            c[i] = Array.isArray( p[i] ) ? [] : {};
                        }
                        //通过递归,进行再一次遍历,直到typeof p[i]不是对象,然后逐层返回
                        deepCopy(p[i], c[i]);
                    }else {
                        c[i] = p[i];
                    }
                }
            }
            return c;
        };

 

posted on 2019-03-12 15:08  玩笑过后  阅读(204)  评论(0编辑  收藏  举报