// 定義一個對象
var obj = {
a: 1,
b: {
name: 'mystic',
say: function() {
console.log('my name is ' + this.name)
},
child: {
name: 'subObj',
childFunc: function() {
console.log('this is ' + this.name)
}
}
},
c: [1,2,3]
}
// 深拷貝函數
function deepCopy(obj) {
let result = obj
// 如果value值爲object類型並且非空, 進行遞歸
if (typeof obj === 'object' && obj !== null) {
// 判斷value值類型是數組還是對象
result = Object.prototype.toString.call(obj) === '[object Object]' ? {} : []
// 這個就是賦值的過程, 好好去理解遞歸的精髓
for(let prop in obj) {
result[prop] = deepCopy(obj[prop])
}
}
// 如果爲除object的其他類型, 直接把value值賦給對應的key
return result
}
// 進行拷貝
let obj2 = deepCopy(obj)
// 修改拷貝對象的值
obj2.b.child.name = 'xxxSubObj'
// 輸出調試
console.log(obj, obj2)
[javascript] js深拷貝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.