1.浅克隆
Object.assign
var obj1 = {
a: 1,
b: {
a: 2
}
}
var obj2 = Object.assign({}, obj1)
obj2.a = 2
console.log(obj1.a)
obj2.b.a = 3
console.log(obj1.b.a)
Array.prototype.concat
var arr1 = [1, [2]]
var arr2 = Array.prototype.concat.call([], arr1)
arr2[0] = 2
console.log(arr1[0])
arr2[1][0] = 1
console.log(arr1[1][0])
$.extend
var obj = {
a: 1,
b: {
a: 2
}
}
var obj1 = $.extend({}, obj)
console.log(obj.b === obj1.b)
2.深克隆
JSON
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj))
}
$.extend
var obj = {
a: 1,
b: {
a: 2
}
}
var obj1 = $.extend(true, {}, obj)
console.log(obj.b === obj1.b)
手写一个deepClone
var deepClone = (function() {
var checkType = function(anyType, type) {
return Object.prototype.toString.call(anyType) === ('[object ' + type + ']')
}
return function(o) {
if (typeof o === 'object' && o !== null) {
if (checkType(o, 'Array')) {
var len = o.length
var arr = new Array(len)
for (var i = 0; i < len; i++) {
arr[i] = deepClone(o[i])
}
return arr
} else {
var obj = {}
for (var prop in o) {
if (o.hasOwnProperty(prop)) {
obj[prop] = deepClone(o[prop])
}
}
return obj
}
} else {
return o
}
}
})()
var obj = {
a: 1,
b: {
a: 2
}
}
var obj1 = deepClone(obj)
console.log(obj.b === obj1.b)