javascript和jquery的克隆

1、javascript 的浅拷贝和深拷贝

1.js的浅拷贝(浅克隆);
    例子:
         var test = { a:"1",b:"2"};
         var test2 = test   // 即完成拷贝;
         test2.a = 10;
         console.log(test2.a)  // 10;
         console.log(test.a)   // 10;
        // 说明: 因为数组和对象都是复杂数据类型,所以上述方法不是简单的传值,而是传址; 这样一旦改变test2中属性的属性值,那么test中的值也会相应的改变,这肯定不是我们所想要的结果,所以深拷贝就自然而然出现了。 
2.js的深拷贝(深克隆)  
    // 下面是封装的一个深拷贝的函数;
    function deepClone(data){
        // 1.声明一个变量来存储拷贝的数据;
            var o ;
        // 2.根据判断的数据类型来定义声明的变量的数据类型;
            if(data instanceof Array){
                o = [];
            }else if(typeof(data)==="object"){
                o = {};
            }else{
                return data; 
            }
        // 3.根据判断的结果来进行拷贝;
            if(data instanceof Array){
                for(var i =0; i< data.length; i++){
                    o.push(deepClone(data[i]))  // 重复调用上述方法,以防止数组里面嵌套的还有数组
                }
                return 0 ;
            }else if(typeof(data)==="object"){
                for(var key in data){
                    o[i] = deepClone(data[key]); //重复调用上述方法,以防止对象里面嵌套的还有对象;
                } 
                return o; 
            }   
    }
3.js的深拷贝(深克隆)的另一种写法:
    function clone(Obj) {
        var buf; 
        if (Obj instanceof Array) {
            buf = []; // 创建一个空的数组
            var i = Obj.length;
            while (i--) {
                buf[i] = clone(Obj[i]);
            }
            return buf;
        } else if (Obj instanceof Object){
            buf = {}; // 创建一个空对象
            for (var k in Obj) { // 为这个对象添加新的属性
                buf[k] = clone(Obj[k]);
            }
                return buf;
        }else{
            return Obj;
        }
    }

2、jquery的浅拷贝和深拷贝;

1.jquery的浅拷贝(浅克隆),此方法只会拷贝最顶层的非object对象;
    var obj1 = {a:"123",b:"456"};
    var obj2 = $.extend({},obj1);  // 完成复制
2.jquery的深拷贝(深克隆),一层一层往下复制直到最底层;
    例:
        var obj3 = {
            a:"111",
            b:[1,2,3,{c:"s1"}],
            c:{d:"s3",e:[4,5,6]}
        };
        var obj4 = $.extend(true,{},obj3);
        obj4.a = "sss";
        obj4.b[0] = 100;
        obj4.c.e.[0] = 400;
    console.log(obj3);  
    console.log(obj4)   
// 说明: obj4内部属性的值改变之后,如果obj3中的相应值保持不变,就说明复制成功。

3、json实现拷贝(克隆)

1.json实现克隆,先通过json.stringify一下,然后在json.parse一下,就能实现深拷贝,需要注意的是json格式的拷贝的数据类型只支持基本数据类型;
    例:
    var obj = {"a":"123", "b":function(){console.log("cc")}}
    var obj1 = JSON.stringify(obj);
    console.log(JSON.parse(obj1)) // "{"a":"123"}" ;
// 说明: 在json.stringify()方法中会把不是基本数据类型的数据都会过滤掉。因此,function函数就不存在了。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值