js day21 對象02

六、對象的淺克隆

現在希望得到person對象的克隆對象,這兩個對象的屬性都相同。修改其中一個對象的時候不會影響另外一個對象

var student={
    name:'jack',
    age:18,
    sex:'male'
}

function clone(){
    var student2={};
    for(var key in student){
        student2[key]=student[key];
    }
    return student2;
}
var student2=clone();
console.log(student2);
//修改student中的屬性,student2中的屬性不會跟著變
student.name='rose';
console.log(student);
console.log(student2)

在上面的代碼中,我們成功復制了student,當我們修改student的時候,student2不會改變。但是在上面的例子中,對象的所有屬性值都是原始類型,如果將對象換成下面的對象

var student={
    name:'jack',
    age:18,
    sex:'male',
    friend:['lily','lucy']
}

function clone(){
    var student2={};
    for(var key in student){
        student2[key]=student[key];
    }
    return student2;
}
var student2=clone();
console.log(student2);
student.friend[0]='rose';
console.log(student.friend);
console.log(student2.friend)

然后再用我們的clone方法克隆這個對象,就會發(fā)現,當我們改變friends屬性的時候,兩個對象都會改變。所以這樣的clone方法只能叫“淺度克隆”。

七、對象的深度克隆

如果克隆的對象所有屬性值都是原始類型,這樣的方法是沒有問題的,但是如果對象的屬性有引用類型,那么我們克隆的對象屬性值存儲的引用是指向同一個對象的,這樣就沒有完全實現對象的克隆,兩個對象仍然存在關系,我們可以通過遞歸函數來實現對象的深度克隆

var student={
    name:'jack',
    age:18;
    friend:['lily',lucy]
}

function clone(obj){
    var newObj=obj instanceof Array?[]:{};
    for(var key in obj){
        if(obj[i] instanceof Object){
            newObj[i]=clone(obj[i]);
        }else{
            newObj[i]=obj[i];
        }
    }
    return newObj;
}
           
var newObj=clone(student);
student.friend[0]='rose';
console.log(student.friend[0]);
console.log(newObj.friend[0]);

八、遞歸函數

1)編寫一個函數n,調用這個函數時,倒敘輸出1-n之間的所有正整數。比如輸入5,會輸出5,4,3,2,1

function print(n){
    for(var i=n;i>0;i--){
         console.log(i);
    }
}
print(5);

2)遞歸:在函數內再次調用該函數

function show(n){
    console.log(n);
    if(n>1){
        show(--n);
    }
}
show(5);

3)計算階乘

5的階乘:54321
用for循環(huán)的方式

function count(n){
    var result=1;
    for(var i=n;i>0;i--){
        result=result*i;
    }
    return result;
}
console.log(count(5));

用階乘的方式

function counts(n){
    if(n==1){
        return n;
    }else{
        return n*count(n-1);
    }
}
console.log(count(5));
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容