[javascript] js深拷貝


// 定義一個對象
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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章