這裏的對象(深)拷貝,不是對象的賦值引用。
是新建一個對象,然後通過遍歷原對象,將所有的屬性賦值給新的對象
//(不支持關聯/索引混合的數組)
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是另外定義的用來判斷是否是數組和是否是對象的方法