国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

對象的深復制

elva / 3126人閱讀

摘要:異同淺復制影子克隆只復制對象的基本類型對象類型仍屬于原來的引用。深復制深度克隆不緊復制對象的基本類同時也復制原對象中的對象。就是說完全是新對象產生的。注意事項直接在上實現該方法的好處是,所有對象都會繼承該方法。

異同:

淺復制 (影子克隆): 只復制對象的基本類型, 對象類型, 仍屬于原來的引用。
深復制 (深度克隆): 不緊復制對象的基本類, 同時也復制原對象中的對象。就是說完全是新對象產生的。

思路:

遍歷所有該對象的屬性,
如果該屬性是 "object" 則需要特殊處理,
如果這個 object 對象比較特殊,是一個數組,那就創建一個新的數組并深復制數組里的元素
如果這個 object 對象是個非數組對象,那直接再對它遞歸調用深復制方法即可。
如果不是 "object",則直接正常復制就行。

注意事項:

直接在 Object.prototype 上實現該方法的好處是,所有對象都會繼承該方法。壞處是某些庫也會改寫 Object 對
象,所以有時會發生沖突。這是需要注意的。

代碼:
Object.prototype.deepCopy=function(){
    var obj={};//用于最后返回一個對象,這個對象是深復制的結果
    for(var attr in this){//遍歷這個對象的每一個屬性
        if(this.hasOwnProperty(attr)){//主要是遞歸自有屬性
            if(typeof (this[attr]==="object")){//如果對象的屬性是一個對象,就遞歸復制它的每一個屬性
                if(this[attr]===null){//如果對象為null
                    obj[attr]=null;
                }else if(Object.prototype.toString(this[attr])==="[object Array]"){//如果是個數組
                    obj[attr]=[];
                    for(var i=0;i

ES6 版本

function deepCopy(obj){
    if(typeof obj === "object"){
        if(obj === null){
            return null;
        }
        let result = {};
        const keys = Object.keys(obj);
        const length = keys.length;
        for(let i=0;i           
               
                                           
                       
                 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80817.html

相關文章

  • 深入剖析 JavaScript 的深復制

    摘要:的不能算作深復制,但它至少比直接賦值來得深一些,它創建了一個新的對象。它們的主要用途是對存在環的對象進行深復制。比如源對象中的子對象在深復制以后,對應于。希望這篇文章對你們有幫助深復制方法所謂擁抱未來的深復制實現參考資料 本文最初發布于我的個人博客:咀嚼之味 一年前我曾寫過一篇 Javascript 中的一種深復制實現,當時寫這篇文章的時候還比較稚嫩,有很多地方沒有考慮仔細。...

    gclove 評論0 收藏0
  • JS 中的深拷貝與淺拷貝

    摘要:什么是深拷貝淺拷貝見名知義,無論是深拷貝還是淺拷貝,都是的問題。使用如下以上就是關于中的深拷貝與淺拷貝的知識和如何進行深拷貝的知識了,如果有錯或者有其他方式的話,歡迎在下面留言評論啦 前言 最近在寫項目的時候涉及到一些父子組件傳遞個對象或者數組通信啥的,或者是直接復制添加對象啥的,直接使用賦值的時候總會出錯。一查原來是淺拷貝的問題,就從網上找了點資料,匯總到這里來了。 1 什么是深拷貝...

    ztyzz 評論0 收藏0
  • 在js中的深復制實現方法

    摘要:針對本話題,我在年月發布了新的文章深入剖析的深復制要實現深復制有很多辦法,比如最簡單的辦法有上面這種方法好處是非常簡單易用,但是壞處也顯而易見,這會拋棄對象的,也就是深復制之后,無論這個對象原本的構造函數是什么,在深復制之后都會變成。 針對本話題,我在2015年5月發布了新的文章:深入剖析 JavaScript 的深復制 要實現深復制有很多辦法,比如最簡單的辦法有: var...

    Alliot 評論0 收藏0
  • Javascript中的深復制

    摘要:對一個對象或者數組這種引用類型的值進行復制可以分為淺復制和深復制,比如這樣的一個對象很明顯這個對象是存在兩層的,不是基本類型值,而是另一個對象。上面講的就是淺復制,在實際應用中存在很嚴重的問題。基于的做法是這樣的淺復制深復制 對一個對象或者數組這種引用類型的值進行復制可以分為淺復制和深復制,比如這樣的一個對象 let obj={ a:1, b:{ a:1...

    104828720 評論0 收藏0
  • Javascript中的深復制

    摘要:對一個對象或者數組這種引用類型的值進行復制可以分為淺復制和深復制,比如這樣的一個對象很明顯這個對象是存在兩層的,不是基本類型值,而是另一個對象。上面講的就是淺復制,在實際應用中存在很嚴重的問題?;诘淖龇ㄊ沁@樣的淺復制深復制 對一個對象或者數組這種引用類型的值進行復制可以分為淺復制和深復制,比如這樣的一個對象 let obj={ a:1, b:{ a:1...

    Lin_YT 評論0 收藏0

發表評論

0條評論

elva

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<