JS對象拷貝實現

這裏的對象(深)拷貝,不是對象的賦值引用。
是新建一個對象,然後通過遍歷原對象,將所有的屬性賦值給新的對象

//(不支持關聯/索引混合的數組)
function extend(parent) {
	var child;	
	if(!isObject(parent) && !isArray(parent)) return parent;
	if(isArray(parent) && parent.length){
		child = [];	
		parent.forEach(function(item){
			child.push(extend(item));
		})
	} 
	else if(isArray(parent)&&parent.length==0){
	//關聯數組
		child = [];
		handler()
	}
	else if(isObject(parent)){
		child = {};
		handler()
	}			
	return child; //返回目標對象child
	
	function handler(type){		
		for(var i in parent) {			
			//直接操作對象的屬性,對其賦值
			if(parent.hasOwnProperty(i)) {
				if(isObject(parent[i]) || isArray(parent[i])){
					child[i] = extend(parent[i])
				}else{										
					child[i] = parent[i]				
				}						
			}
		}		
	}
}

注意,上面的isArray和isObject是另外定義的用來判斷是否是數組和是否是對象的方法

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