有只小跳蛙
2018-12-26 22:18:41
function cloneObject (src) {var newObj = {}if (typeof (src) !== 'object') { return src;}else{ for (var attr in src) { newObj[attr] = cloneObject(src[attr]); }}return newObj;}這里面的newObj[attr]=cloneObject(src[attr]) 是遞歸這我知道 但是這步的原理我沒看明白 是把src[attr]復制給newObj 這個數(shù)組嗎 不是很能理解復制的原理 求解
1 回答
慕容3067478
TA貢獻1773條經(jīng)驗 獲得超3個贊
newObj怎么是數(shù)組呢,這不是一個對象么?newObj[attr]是指newObj上的一個屬性,[]不是數(shù)組啊。
首先,cloneObject這個函數(shù)的參數(shù)src是應該是一個對象對吧,不是對象就直接返回了。假如是對象的話,我們要做的,就是把傳入的對象深拷貝一份,將深拷貝的對象return出來,這是這個函數(shù)的作用。這個理解對吧。
然后就牽扯到遞歸遍歷了,假如src上的一個屬性也是對象,那么這個對象就也需要遍歷,也就是再調用cloneObject這個函數(shù)。
前邊說了,這個函數(shù)就是傳進去一個對象,再把深拷貝的對象return出來。既然src上的這個屬性是對象,那么就把這個屬性傳進去,將返回的對象賦值給外邊newObj對象的attr屬性,attr是形參,根據(jù)屬性名不同會變。
這就是再次調用cloneObject的原因了。
假如src上的屬性是對象,這個對象的一個屬性又是對象,那就在第二次調用的cloneObject里再調用第三次cloneObject,將return出的對象賦值給第二次cloneObject里的newObj,第二次的最終還會賦值給第一次cloneObject里的newObj,實現(xiàn)遞歸。
添加回答
舉報
0/150
提交
取消
