1. 程式人生 > >JS的深度克隆,利用構造函數原型深度克隆

JS的深度克隆,利用構造函數原型深度克隆

多說 col object 淺克隆 得到 參數 class instance UNC

我愛擼碼,擼碼使我感到快樂!
大家好,我是Counter。
今天來寫寫,JS中的深度克隆,這個在筆面試中,考的還是比較多的,主要是對象與數組的賦值,如果直接賦值的話,那麽得到的是對象或者數組在堆裏的地址,那麽原有的的數據修改的話,那麽克隆的數據也會隨著修改,這就是淺克隆,所以這邊就要使用到枚舉,然後再每一項賦值,這樣就可以完成一份深度克隆,這樣原對象裏修改屬性,如果你在這對象修改之前已經克隆的話,那麽你這個克隆的對象,對象裏的屬性是不變,這就是深度克隆。
話不多說了,直接上代碼:

// 假設要克隆的對象a
        var a = {
            a: 1,
            b: 
2, c: { d: 3, e: 4, f: [0, 9, 8, 7, [6, 5, 4]] } }; // 自定義克隆函數 function clone(obj) { // 判斷,如果傳進來的參數是數組的話 if ( obj instanceof Array) { // 定義一個空數組 var
arr = []; // 遍歷整個數組 for( var i = 0; i < obj.length; i++) { // 深度克隆數組每一項 arr[i] = clone(obj[i]); } // 再返回出去 return arr; } // 判斷是否為對象 if ( obj instanceof
Object) { // 構建一個空對象 var obj1 = {}; // 枚舉傳進來的對象 for( key in obj) { // 深度克隆對象 obj1[key] = clone(obj[key]); } // 再返回出去 return obj1; } // 如果傳進的不是數組,也不是對象,那麽就返回當前值 return obj; } // 利用構造函數的原型克隆,也可以實現深度克隆 function clone1(obj) { function F() {}; F.prototype = obj; return new F() }

JS的深度克隆,利用構造函數原型深度克隆