克隆
var obj = {
name : 'abc' ,
age : 123 ,
sex : 'female' ,
card : [ '1' , '2' ]
}
var obj1= { }
function clone ( origin, target) {
for ( var prop in origin)
{
target[ prop] = origin[ prop] ;
}
}
clone ( obj, obj1) ;
深度克隆
var obj = {
name: 'abc' ,
age: 123 ,
sex: 'female' ,
card: [ '1' , '2' ] ,
wife: {
name: 'bcd' ,
son: {
name: "aaa"
}
}
}
var obj1 = { } ;
function deepClone ( origin, target) {
var target = target || { } ,
toStr = Object. prototype. toString,
arrStr = "[object Array]" ;
for ( var prop in origin) {
if ( origin. hasOwnProperty ( prop) ) {
if ( typeof ( origin[ prop] ) == 'object' && typeof ( origin[ prop] ) !== null ) {
if ( toStr. call ( origin[ prop] ) == arrStr) {
target[ prop] = [ ] ;
} else {
target[ prop] = { } ;
}
deepClone ( origin[ prop] , target[ prop] )
} else {
target[ prop] = origin[ prop] ;
}
}
}
return target;
}
deepClone ( obj, obj1) ;
用三目运算符简化深度克隆
var obj = {
name: 'abc' ,
age: 123 ,
sex: 'female' ,
card: [ '1' , '2' ] ,
wife: {
name: 'bcd' ,
son: {
name: "aaa"
}
}
}
var obj1 = { } ;
function deepClone ( origin, target) {
var target = target || { } ,
toStr = Object. prototype. toString,
arrStr = "[object Array]" ;
for ( var prop in origin) {
if ( origin. hasOwnProperty ( prop) ) {
if ( typeof ( origin[ prop] ) == 'object' && typeof ( origin[ prop] ) !== null ) {
target[ prop] = toStr. call ( origin[ prop] ) == arrStr ? target[ prop] = [ ] : { } ;
deepClone ( origin[ prop] , target[ prop] )
} else {
target[ prop] = origin[ prop] ;
}
}
}
return target;
}
deepClone ( obj, obj1) ;