• js拷贝


    现在有一个对象

    var obj = {
    
        name: '隔壁老王',
        age: 60,
        sex: 'male'
        
    }
    
    

    我们现在想把obj里的每一个属性拷贝到一个空对象var obj1 = {}中,那么需要写一个克隆方法,首先遍历一下obj对象,然后把里面的每一个属性都拷贝过去。代码如下:

    var obj = {
    
        name: '隔壁老王',
        age: 60,
        sex: 'male'
    
    };
    
    var obj1 = {};
    
    function clone(origin, target) {
        for (var prop in origin) {
            target[prop] = origin[prop];
        }
    };
    
    clone(obj, obj1);

    在控制台中查看obj1,会发现实现了对obj的拷贝。

    我们再对这个方法进行一些完善:有可能用户在执行clone方法时,只传origin一个参数,然后将函数执行结果赋给对象obj1,所以我们需要在方法最下方加一个返回值target,返回克隆结果,相应的也要在函数体里声明var target = {};

    还有一种情况obj1对象里事先有其他属性,那么函数体里写 var target = target || {};

    function clone(origin, target) {
        var target = target || {};
        for (var prop in origin) {
            target[prop] = origin[prop];
        }
        return target;
    }
    var obj = {
                name: '隔壁老王',
                age: 60,
                sex: 'male',
                card: ['信用卡', '借记卡', '理发卡'],
                wife: {
                    name: '小刘',
                    son: {
                        name1: '王小宝',
                        name2: '王二宝'
                    }
                },
                divorce: function () { }
            };
    
            var obj1 = {
    
                father: "老王"
    
            };
    
            function deepClone(origin, target) {
                var target = target || {},
                    toStr = Object.prototype.toString,
                    arrStr = '[object Array]';
                for (var prop in origin) {
                    if (origin.hasOwnProperty(prop)) {
                        if (typeof (origin[prop]) == 'object' && origin[prop] !== null) {
                            target[prop] = (toStr.call(origin[prop]) == arrStr) ? [] : {};
                            deepClone(origin[prop], target[prop]);
                        } else {
                            target[prop] = origin[prop];
                        }
                    }
                }
                return target;
            }
    
            deepClone(obj, obj1);
  • 相关阅读:
    Guns 01 项目基本运行
    个人 比较好用的软件
    个人 软件开发 综合技能提升
    开源框架 综合知识
    开源框架 工作流框架
    开源框架 Java 开发框架 1
    开源框架 Java 管理系统
    开源框架 C#
    scp(安全拷贝)和rsync(增量复制)
    完全分布式集群的准备工作
  • 原文地址:https://www.cnblogs.com/love314159/p/8687024.html
Copyright © 2020-2023  润新知