jq中extend用法以及深度克隆对象

【jQuery中extend用法】

extend是延伸的意思,平时我们写项目经常会遇到一个方法重用的时候,但是呢,jq自带的又没有这个方法,满足不了我们,那怎么办呢,

咦,那我就会告诉你,我们可以自己来给jq中增加一些方法,那么怎么增加呢?下面我就介绍一下这个方法!
比如现在我需要一个方法,可以把一个元素背景颜色变色,看例子:

$(function(){
   $('#div1').toRed(); //让当前这个元素变红色
   $('#div2').toBlue(); //让当前这个元素变蓝色
   $('div').toRandomColor(); //试试能不能延伸循环来让所有的都变色
})

那么怎么写这个toRed,toBlue方法呢?

$.fn.toRed=function(){
    this.css('background','red')
};
$.fn.toBlue=function(){
    this.css('background','blue')
};

试试能不能延伸循环来让所有的都变色toRandomColor
到底能不能呢?答案是:可以
给jq延伸一些小方法,也可以直接用jq的功能,比如说循环$.each:

$.fn.toRandomColor=function(){
    $.each($(this),function(index,element){ //直接用jq的循环即可,
        $(element).css('background','red')
    })
};

那么有的同学说了,鹏哥,这里面没有用到extend啊。。那现在我告诉你怎么用:

$.fn.extend({  //直接在extend(里面写一个json,然后直接写方法名,以及方法即可)
    toBlue:function(){
        this.css('background','blue')
    },
    toRed:function(){
        this.css('background','red')
    }
});

以上只是介绍一下extend的用法,下面开始进入今天的正题,用extend方法来深度克隆一个对象。

那么怎么用extend克隆呢,首先介绍一下extend:

**extend(true/false,dest,src1,src2,src3...) **
第一个参数为true或者是false,true就是深度克隆,false就是浅克隆。

浅拷贝(false 默认):如果第二个参数对象有的属性第一个参数对象也有,那么不会进行相同参数内部的比较,直接将第一个对象的相同参数覆盖。

深拷贝(true):如果第二个参数对象有的属性第一个参数对象也有,还要继续在这个相同的参数向下一层找,比较相同参数的对象中是否还有不一样的属性,如果有,将其继承到第一个对象,如果没有,则覆盖。

那么怎么直接克隆一个对象呢。
比如说,我有这么一个对象,要求给我深度克隆出一个对象,(前面的文章中我也说过浅克隆和深克隆的原生写法)

var obj1 = {
      'a': 's1',
      'b': [1,2,3,{'a':'s2'}],
      'c': {'a':'s3', 'b': [4,5,6]}
    };
    var obj2=$.extend(true,{},obj1);  //第二个参数是指定我要复制后的那个对象是什么写数组就是数组,写json就是json
    obj1.a="adsa";
    obj2.b[0]=12;
    console.log(obj1); //{'adsa': 's1','b': [1,2,3,{'a':'s2'}],'c': {'a':'s3', 'b': [4,5,6]}}
    console.log(obj2); //{'adsa': 's1','b': [12,2,3,{'a':'s2'}],'c': {'a':'s3', 'b': [4,5,6]}}

或者是这样用合并两个对象成为一个新的对象:

var obj1 = {
        'a': 's1',
        'b': [1,2,3,{'a':'s2'}],
        'c': {'a':'s3', 'b': [4,5,6]}
      };
      var obj2=[1,2,3,4,5]
      var obj3=$.extend(true,obj2,obj1);
      console.log(obj3);
      //[1, 2, 3, 4, 5, a: "s1", b: Array[4], c: Object]

以上结束。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,196评论 6 13
  • $()创建对象的实现 首先我们来看一下需求$("div")可以创建一个对象该对象可以调用所有jq的元素公用方法该对...
    种谔阅读 2,042评论 3 6
  • 深闺寂寞冷, 豪门城府深。 游龙空中腾, 野草路边生。
    肯尼迪金阅读 279评论 0 2
  • 姓名:王成茗 日精进打卡第18天 【打卡始于2017.10.12持续于2017.10.29】 【知~学习】...
    王成茗阅读 167评论 0 0