JS面向对象案例:深拷贝

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 要拷贝的对象
        var obj = {
            name: '撩课',
            age: 18,
            friends: ['小花', '小黑'],
            goodF: {
                name: '小撩',
                age: 19,
                adress: '上海',
                pets: [{ name: '土豆' }, { name: '马铃薯' }]
            },
            bir: new Date()
        };

        function deepCopyObjNewObj(fromObj, toObj) {
            // 在函数中先检查第一个参数是否有值,
            // 如果没有值那么久初始化一个空的对象
            for (var key in fromObj) {
                var fromValue = fromObj[key];
                if (!isObj(fromValue)) {
                    toObj[key] = fromValue;
                } else {
                    // 如果是引用类型,那么就再调用一次这个方法,
                    // 去内部拷贝这个对象的所有属性
                    var temObj = new fromValue.constructor;
                    deepCopyObjNewObj(fromValue, temObj);
                    toObj[key] = temObj
                }
            }
        }

        // 判断是否是一个对象
        function isObj(obj) {
            return obj instanceof Object;
        }

        // 调用
        var newObj = {};
        deepCopyObjNewObj(obj, newObj);

        obj.goodF.pets[0]["color"] = "red";
        console.log(obj);
        console.log(newObj);
    </script>
</body>

</html>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容