淺拷貝:B復(fù)制了A谦炒,當修改A時缕探,B跟著變。
深拷貝:B復(fù)制了A潭兽,當修改A時讼溺,B沒變化嬉荆。
淺拷貝:
// 方法一:循環(huán)遍歷
function simpleClone(objNew) {
var obj = {}
for (var i in objNew) {
obj[i] = objNew[i]
}
return obj
}
// 方法二:Object.create()
var objCopy = Object.create(obj) // 拷貝到了_proto_屬性里
深拷貝:(方法二比較常用)
// 方法一:循環(huán)遍歷
function deepClone(tartgetObj, endObj) {
var obj = endObj || {}
for (var key in targetObj) {
if(typeof targetObj[key] === 'object') {
obj[key] = tartgetObj.construtor === Array ? [] : Object.create(null)
deepClone(tartgetObj[key], obj[key])
} else {
obj[key] = targetObj[key]
}
}
return obj
}
// 方法二:JSON.stringify() 和 JSON.parse()
var copyObj = JSON.parse(JSON.stringify(targetObj)) // object -> string -> object