js深度复制

2018-02-03  本文已影响0人  我是强强

function extend(par,chil){

var chil=chil||{};

    for(var keyin par)

{

if(par.hasOwnProperty(key))

{

chil[key]=par[key]

}

}

return chil

};

var obj1={

name:"lol",

    age:5,

    skills:[

"mysql",'node','php','ps'

    ]

};

var obj2={

say:"hello",

};

/*真正的深度复制*/

function deep(par,chil){

child=chil||{}

for(var keyin par)

{

if(par.hasOwnProperty(key))

{

if(typeof par[key]==="object")

{

chil[key]=(Object.prototype.toString.call(par[key])==="[object Array]")?[]:{};

                deep(par[key],chil[key])

}

else

            {

chil[key]=par[key]

}

}

};

    return chil;

}

function extendDeep(parent, child) {

child = child || {};

    for(var iin parent) {

if(parent.hasOwnProperty(i)) {

//检测当前属性是否为对象

            if(typeof parent[i] ==="object") {

//如果当前属性为对象,还要检测它是否为数组

                //这是因为数组的字面量表示和对象的字面量表示不同

                //前者是[],而后者是{}

                child[i] = (Object.prototype.toString.call(parent[i]) ==="[object Array]") ? [] : {};

                //递归调用extend

                extendDeep(parent[i], child[i]);

            }else {

child[i] = parent[i];

            }

}

}

return child;

}

上一篇下一篇

猜你喜欢

热点阅读