版权声明:作者原创,转载请注明出处!

语法:jQuery.extend( [deep ], target, object1 [, objectN ] )

描述: 将两个或更多对象的内容合并到第一个对象。

关于$.extend()的用法网上有很多文章,在这里指向写写对深浅拷贝的理解

深浅拷贝对应的参数就是[deep],是可选的,为true或false。默认情况是false(浅拷贝),并且false是不能够显示的写出来的。如果想写,只能写true(深拷贝)~~

什么是深、浅拷贝呢?先讲定义,再举例子

在默认情况下,通过$.extend()合并操作不是递归的(浅拷贝);如果第一个对象的属性本身是一个对象或数组,那么它将完全用第二个对象相同的key重写一个属性。这些值不会被合并。然而,如果将 true 作为该函数的第一个参数,那么会在对象上进行递归的合并(深拷贝)。

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

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

栗子:

  1. var object1 = {
  2. apple: 0,
  3. banana: {
  4. weight: 52,
  5. price: 100
  6. },
  7. cherry: 97
  8. };
  9. var object2 = {
  10. banana: {
  11. price: 200
  12. },
  13. durian: 100
  14. };
  15.  
  16. //默认情况浅拷贝
  17. //object1--->{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}
  18. //object2的banner覆盖了object1的banner,但是weight属性未被继承
  19. //$.extend(object1, object2);
  20.  
  21. //深拷贝
  22. //object1--->{"apple":0,"banana":{"weight":52,"price":200},"cherry":97,"durian":100}
  23. //object2的banner覆盖了object1的banner,但是weight属性也被继承了呦
  24. $.extend(true,object1, object2);
  25.  
  26. console.log('object1--->'+JSON.stringify(object1));

仔细阅读上面这段代码,去运行看结果,你就会理解什么是深拷贝和浅拷贝了!

随机推荐

  1. Security8:删除Role 和 User

    数据库的Role 和 User都是基于Specified DB的,在删除这些Principal之前,必须使用Use clause,切换到指定的DB中. sys.database_role_member ...

  2. Over:窗口函数(滑动聚合)

    Over 窗口函数在Select 子句中,对查询的结果集进行“滑动-聚合”运算:如果使用count,那么基于滑动窗口的聚合语义同 base+1 累加:如果使用sum,那么基于滑动窗口的聚合语义等同于数 ...

  3. IOS开发之微信山寨版

    为了犒劳自己的学习内容,就山寨个微信的视图控制吧.拿着微信,仔细的看了一下,主要用到了TabBarController以及配置TabBarItem, NavigationController以及配置N ...

  4. Objective-C中的属性机制

    Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现.在学习OC中属性之前我们先要知道为什么要为变量实现gett ...

  5. 小菜学习Winform(七)系统托盘

    前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...

  6. canvas学习和面向对象(二)

    Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...

  7. 1Z0-053 争议题目解析685

    1Z0-053 争议题目解析685 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 685.In your test database: -You are using Recover ...

  8. 重温Servlet学习笔记--Cookie对象

    首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以 ...

  9. Freemark笔记

    Freemark基本语法知识 Freemark 常用代码总结1 Freemark 常用代码总结2 笔记,吐槽一下freemark的蛋疼语法. 1.elseif 中间不能有空格 2.三目运算符 语法和j ...

  10. SQLite关系型数据库

    SQLiteOpenHelper的使用:       首先声明一个DatabaseHelper类,这个类继承于SQLiteOpenHelper类,首先得有构造函数,声明DatabaseHelper类如 ...