zoukankan      html  css  js  c++  java
  • javascript 深拷贝

    浅拷贝    

    <script type="text/javascript">
            var oOriginal = {
                memNum: 1, // number 
                memStr: "I am a string"// string 
                memObj: {
                    test1: "Old value" // we'll test 
                },
                memArr: [
                        "a string",
                        {
                            test2: "Try changing me"
                        }
                        ]
            };
            var extend = function (result, source) {
                for (var key in source)
                    result[key] = source[key];
                return result;
            }
            var oCopy = extend({}, oOriginal); // 浅拷贝 
            oCopy.memObj.test1 = "New value"// 出现问题了,会反射到原对象上 
            alert(oOriginal.memObj.test1); // 结果副本与原本都一同被修改了 
            oCopy.memArr[1].test2 = "I am changed";
            alert(oOriginal.memArr[1].test2); // 同样中招了 
        </script>
    深拷贝 
    <script type="text/javascript">
        var oOriginal = {
            memNum: 1, // number 
            memStr: "I am a string"// string 
            memObj: {
                test1: "Old value" // we'll test 
            },
            memArr: [
                    "a string", 
                    { 
                    test2: "Try changing me" 
                    }
                    ]
        };
        dom = {};
        dom.is = function (obj, type) {
            var toString = Object.prototype.toString, undefined;
            return (type === "Null" && obj === null) ||(type === "Undefined" && obj === undefined) ||toString.call(obj).slice(8, -1) === type;
        };
        dom.deepCopy = function (result, source) {
            for (var key in source) {
                var copy = source[key];
                if (result === copy) continue//如window.window === window,会陷入死循环 
                if (dom.is(copy, "Object")) {
                    result[key] = arguments.callee(result[key] || {}, copy);
                } else if (dom.is(copy, "Array")) {
                    result[key] = arguments.callee(result[key] || [], copy);
                } else {
                    result[key] = copy;
                }
            }
            return result;
        };
        var oCopy = dom.deepCopy({}, oOriginal); 
        oCopy.memObj.test1 = "New value"; 
        alert(oOriginal.memObj.test1); 
        oCopy.memArr[1].test2 = "I am changed";
        alert(oOriginal.memArr[1].test2); 
    </script> 
  • 相关阅读:
    天线设计相关性能参数
    为什么在晶振上并电阻?
    晶体谐振器 晶体振荡器 正确区分
    示波器入门之采样率、存储深度
    示波器你了解多少?存储深度是什么?
    数字时序:时钟信号、抖动、迟滞和眼图
    信号完整性与电源完整性的详细分析
    信号完整性入门笔记三---阻抗及影响阻抗的因素
    H5——条件注释
    H5——meta
  • 原文地址:https://www.cnblogs.com/xuzhiwei/p/2150608.html
Copyright © 2011-2022 走看看