深度轉殖遞迴

2021-10-24 01:21:46 字數 1241 閱讀 5414

function

deepclone

(origin,target)

;//防止target為空

var tostring=object.prototype.tostring,

arrclass=

'[object array]'

, objectclass=

'[object object]'

;for

(var prop in origin)

else

if(tostring.

call

(origin[prop]

)==objectclass);}

// 只考慮陣列和物件的引用型別

// target[prop]=tostring.call(origin[prop])==arrclass? :{};

// 遞迴,迴圈取出物件或者陣列中的元素,知道都是基本資料型別

deepclone

(origin[prop]

,target[prop]);

}else

}return target;

}

引數1為被轉殖的物件,引數2為轉殖物件target

var target=target || {};這句的意思是,宣告乙個變數名為target的變數,值為實參target || ,當我們沒有傳入引數的時候,第二實參值為undefinde,在進行表示式運算的時候,轉為boolean為false,target最後的值為{}乙個空物件。

object.prototype.tostring提取獲得最初物件型別字串的方法,後面會用,arrclass和objectclass都是為後面做判斷使用的字串。

遍歷被轉殖物件origin,首先判斷當前項是基本資料型別還是引用資料型別,如果是基本資料型別,函式通過else向下執行,如果不是基本資料型別,那麼就進入if判斷中,引用資料型別的大塊是陣列和物件,這裡我們判斷引用資料型別是陣列引用資料型別還是物件引用資料型別,object.prototype.tostring.call(引用資料型別)如果結果為』[[object array]]'即為物件,如果結果為『[object object]』即為物件,判斷完成後建立相對於的空陣列或空物件,下一步呼叫函式本身,引數1寫入當前引用型別項,引數2寫入建立的空陣列或者是空物件,這樣一層一層的向下,直到最下層都是基本資料型別為止,返回得到的target,一層一層向上返回,最後得到轉殖的效果,這個遞迴的出口為最下層所有資料都為基本資料型別。

深度轉殖物件

有時,我們需要對乙個物件進行複製,如下列要求 1.使用遞迴來實現乙個深度轉殖,可以複製乙個目標物件,返回乙個完整拷貝 2.被複製的物件型別會被限制為數字 字串 布林 日期 陣列 object物件。function isobject obj function cloneobject obj 判斷物件型...

深度轉殖剖析

深度遍歷 思路 遍歷物件 for var key in object 判斷是否是原始值 typeof 判斷是物件還是陣列 instanceof看原型鏈有無其原型 tostring constructor 因父子域問題最好使用tostring 建立相應的陣列或物件 function deepclone...

經典物件轉殖模型 深度轉殖

我們都知道 json.parse json.stringfy obj 可以深度轉殖乙個物件,但是有乙個缺陷,不能轉殖 物件 轉殖的方法 param obj returns function clone obj else if obj instanceof object else 轉殖物件 param...