js 深度克隆


js中賦值主要有兩種賦值形式,一種是值引用,另一種是址引用(地址)。

一般對象賦值的時候,都是地址引用,所以在修改新對象的時候,其實修改了在內存區地址上的值。

為了達到值引用的效果,所以有 深度克隆的概念。   ps:自己理解的,被誤導了別怪我

實現方式一:

function deepClone(origin, target) {
    var target = target || {},
        toStr = Object.prototype.toString,
        arrStr = '[object Array]';

    for (var prop in origin) {
        if (origin.hasOwnProperty(prop)) {
            if (origin[prop] !== 'null' && typeof (origin[prop]) == 'object') {
                if (toStr.call(origin[prop]) == arrStr) {
                    target[prop] = []
                } else {
                    target[prop] = {}
                }
                deepClone(origin[prop], target[prop])
            }
        } else {
            target[prop] = origin[prop];
        }
    }
    return target;
}

  實現方式二:利用JSON轉換   

function deepClone(origin,target){
    var target = target || {};
    target = JSON.parse(JSON.stringify(origin));
    return target;
}

  不知道大家為什么不喜歡用json轉換 ,不知道這樣轉的弊端,歡迎大家補充。   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM