深拷贝语法:var newObj = $.extend(true,{},obj)
浅拷贝语法:var newObj = $.extend(false,{},obj)或者var newObj = $.extend({},obj)
合并对象语法:var newObj = $.extend({},obj1[,obj2[,obj3[...]]])

jQuery.extend = jQuery.fn.extend = function() {//target 被扩展的对象//length 参数的数量//deep 是否深度操作var options, name, src, copy, copyIsArray, clone,target = arguments[0] || {},i = 1,length = arguments.length,deep = false;// target为第一个参数,如果第一个参数是Boolean类型的值,则把target赋值给deep// deep表示是否进行深层面的复制,当为true时,进行深度复制,否则只进行第一层扩展// 然后把第二个参数赋值给targetif ( typeof target === "boolean" ) {deep = target;target = arguments[1] || {};// 将i赋值为2,跳过前两个参数i = 2;}// target既不是对象也不是函数则把target设置为空对象。if ( typeof target !== "object" && !jQuery.isFunction(target) ) {target = {};}// 如果只有一个参数,则把jQuery对象赋值给target,即扩展到jQuery对象上if ( length === i ) {target = this;// i减1,指向被扩展对象--i;}// 开始遍历需要被扩展到target上的参数for ( ; i < length; i++ ) {// 处理第i个被扩展的对象,即除去deep和target之外的对象if ( (options = arguments[ i ]) != null ) {// 遍历第i个对象的所有可遍历的属性for ( name in options ) {// 根据被扩展对象的键获得目标对象相应值,并赋值给srcsrc = target[ name ];// 得到被扩展对象的值copy = options[ name ];// 防止有环,例如 extend(true, target, {'target':target});if ( target === copy ) {continue;}// 当用户想要深度操作时,递归合并// copy是纯对象或者是数组if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {// 如果是数组if ( copyIsArray ) {// 将copyIsArray重新设置为false,为下次遍历做准备。copyIsArray = false;// 判断被扩展的对象中src是不是数组clone = src && jQuery.isArray(src) ? src : [];} else { // 判断被扩展的对象中src是不是纯对象clone = src && jQuery.isPlainObject(src) ? src : {};}// 递归调用extend方法,继续进行深度遍历target[ name ] = jQuery.extend( deep, clone, copy );// 如果不需要深度复制,则直接把copy(第i个被扩展对象中被遍历的那个键的值)} else if ( copy !== undefined ) {target[ name ] = copy;}}}}// 原对象被改变,因此如果不想改变原对象,target可传入{}return target;
};

jQuery.isFunction()函数用于判断指定参数是否是一个函数。
jQuery.isPlainObject()函数用于判断指定参数是否是一个纯粹的对象,所谓"纯粹的对象",就是该对象是通过"{}“或”new Object"创建的。
jQuery.isArray()函数用于判断指定参数是否是一个数组。

JQuery的$.extend()的源码相关推荐

  1. 菜鸟读jQuery 2.0.3 源码分析系列(1)

    原文链接在这里,作为一个菜鸟,我就一边读一边写 jQuery 2.0.3 源码分析系列 前面看着差不多了,看到下面一条(我是真菜鸟),推荐木有入门或者刚刚JS入门摸不着边的看看,大大们手下留情,想一起 ...

  2. chosen.jquery.js 、chosen-select 源码修改控制 chosen:updated 方法动态更新下拉框选项不更新搜索框值 ,chosen 实现远程搜索加载下拉选项

    chosen.jquery.js .chosen-select 源码修改控制 chosen:updated 方法动态更新下拉框选项不更新搜索框值,chosen 实现远程搜索加载下拉选项 chosen. ...

  3. jquery $.proxy使用 Jquery实现ready()的源码

    jquery $.proxy使用 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用2 $('#myElement').cl ...

  4. html5 tab菜单切换页面,11个常用的jQuery TAB切换菜单源码及制作教程

    11个常用的jQuery TAB切换菜单源码及制作教程 Sponsor TAB切换式菜单可以方便为我们减少很多网页布局空间,而且用jQuery的话可以加入一些动画效果,比如渐变,向左右滑动等,提升一定 ...

  5. 基于jQuery经典扫雷游戏源码

    分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center><h1>jQ ...

  6. jquery 1.7.2源码解析(二)构造jquery对象

    构造jquery对象 jQuery对象是一个类数组对象. 一)构造函数jQuery() 构造函数的7种用法: 1.jQuery(selector [, context ]) 传入字符串参数:检查该字符 ...

  7. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  8. jQuery 2.0.3 源码分析 Deferred(最细的实现剖析,带图)

    Deferred的概念请看第一篇 http://www.cnblogs.com/aaronjs/p/3348569.html ******************构建Deferred对象时候的流程图* ...

  9. 最细的实现剖析:jQuery 2.0.3源码分析Deferred

    Deferred的概念请看第一篇 http://www.cnblogs.com/aaronjs/p/3348569.html **构建Deferred对象时候的流程图** **源码解析** 因为cal ...

最新文章

  1. 七种编程语言的学习曲线
  2. 轻量级目标检测大合集
  3. Linux系统查看分区文件系统类型
  4. 江翰服务器保护系统(JH-Data Backup server)
  5. 431.chapter10. working with flat files
  6. jvm虚拟机_一文入门jvm虚拟机
  7. c语言源程序结构是怎样的?
  8. Linux 信号之mysleep
  9. 腾讯PCG光影研究室招聘计算机视觉算法/实习生
  10. 一:ActiveMQ知识整理
  11. 21天jmeter打卡day6 配置元件之HTTP信息头+Cookie管理器
  12. 金蝶K3老单新增自定义菜单按钮
  13. vNext之旅(1):从概念和基础开始
  14. PHP 谷歌翻译类API 接口
  15. 浙江工业大学计算机类专业是几年,浙江工业大学计算机类专业培养计划
  16. 硬件原理图 一键开关机电路
  17. bt和wifi的共存
  18. C++11_关键字_explicit
  19. php做一个文章页面,wordpress主题制作教程(十):制作文章单页模板single.php
  20. 原生JS实现弹幕的简单操作速成

热门文章

  1. hardmard积 用什么符号表示_表面粗糙度=表面光洁度?数值为什么用0.8、1.6、3.2等表示?...
  2. SVN: bdb: BDB1538 Program version 5.3 doesn't match environment version 4.7
  3. Linux之使用网络
  4. 【maven详解-插件】maven插件学习之maven-source-plugin
  5. android 精选文章
  6. Tomcat的结构概述
  7. 学习《ACM 程序设计》笔记--STL
  8. java jquery jsonp 跨域_Jquery跨域调用(JSONP)遇到error问题的解决
  9. 【Python系列】之2:列表和元组
  10. linux查找、搜索字符或文件