jQuery 1.7.1 代码研究 extend
/* version : 1.7.1 * codeName : jQuery * node author : Alfred lee*/ // extend 函数是jQuery 的扩展函数。也是传说中的深度拷贝// 首行把 jQuery.extend jQuery.fn.extend 统一赋值一个函数。jQuery.extend = jQuery.fn.extend = function() {var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; /* options 要扩展到源的某个对象 称为选项 * name 索引名 * src 源的索引记录 * copy 选项的索引记录 * copyIsArray 是不是数组(用来判断如何给原来的对象扩展参见下面的详细分析) * clone 复制体(源有的src的重新定义) * target 源(被扩展的对象) * i 记录数(用来记录从那里是要扩展到源的对象) * length 参数长度 * deep 是否深度拷贝。即取值还是取址不知道和C的 * & 解释类似*/ // Handle a deep copy situation // 是深度的时候 if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {};// skip the boolean and the target i = 2; }// 如果不是深度或 扩展的源不是个对象。 // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; }//如果是对本身扩展。 // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) {// Only deal with non-null/undefined values // 对有效的内容开始扩展复制 这把逐个参数传给了选择项 if ( (options = arguments[ i ]) != null ) {// Extend the base object for ( name in options ) {//遍历选择项 把对应索引的源值和 选择值保存对比。 src = target[ name ];//源 copy = options[ name ];//选择项 //如果源就是要拷贝的(循环引用)防止死循环。 //不操作任何直接跳过继续下一个 // Prevent never-ending loop if ( target === copy ) {continue; }// 如果是深度的时候 这时候判断了是不是常规对象和要扩展进的是不是数组 // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {if ( copyIsArray ) {//这里不知道为何重写了copyIsArray 按道理应该每次都会重新判断不用手动重写的。 //这里是为了格式统一,数组对数组,对象对对象 copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; }//递归扩展 // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) {//不是深度就传址 target[ name ] = copy; } } } } // Return the modified object // 返回的就是扩充后的了。也就是经常用来做默认值的方法。 return target;};
转载于:https://www.cnblogs.com/AlfredLee/archive/2012/02/01/jQuery_extend.html
jQuery 1.7.1 代码研究 extend相关推荐
- jQuery 原理的模拟代码 -4 重要的扩展函数 extend
在上两篇文章中,我们看到每次要通过 jQuery 的原型增加共享方法的时候,都需要通过 jQuery.fn 一个个进行扩展,非常麻烦,jQuery.fn.extend 提供了一个扩展机制,可以方便我们 ...
- Javascript笔记:(实践篇)从jQuery插件技术说起-分析extend方法的源码(发现extend方法里有bug)(下篇)...
1.1 分析$.extend源码 在分析源码之前,我还要加一段s测试代码,代码如下: <script type="text/javascript"> $(doc ...
- 星级评价的代码php,JavaScript_使用jQuery实现星级评分代码分享,前面有一篇原生js实现星级评 - phpStudy...
使用jQuery实现星级评分代码分享 前面有一篇原生js实现星级评分 .可能覆盖面不是很广,现在给出一个jquery实现的星级评分. http://s.thsi.cn/js/jquery-1.7.2. ...
- jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法
jquery订阅发布插件代码草稿! jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法 --- jquery订阅发布插件代码草稿 & ...
- jquery和zepto的扩展方法extend
jquery和zepto的扩展方法extend 总结下jQuery(3.1.1)和zepto(1.1.6)到底是如何来开放接口,使之可以进行扩展,两者都会有类型判断,本文使用简单的类型判断,暂不考虑兼 ...
- 漂亮实用的jQuery倒计时插件特效代码
原文:漂亮实用的jQuery倒计时插件特效代码 源代码下载地址:http://www.zuidaima.com/share/1799598875675648.htm
- 可控制导航下拉方向的jQuery下拉菜单代码
可控制导航下拉方向的jQuery下拉菜单代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- JQuery 入门 - 附案例代码
文章目录 预备知识与后续知识及项目案例 为什么要学jquery 体验jquery的使用 jquery到底是什么 jquery的版本问题 jquery的入口函数 jq对象和dom对象(重要) jquer ...
- Web3j监听功能代码研究
Web3j监听功能代码研究 高洪涛 2021-03-19 本周深入研究了web3j工具包实现以太坊的监听功能,实现了交易监听和代币监听的方法,对监听过程中的常见问题进行了处理,本文就是对这部分开发经验 ...
最新文章
- qt中定时器Timer的使用
- C++ Priemer目录索引
- 5款替代微软Visio的开源免费软件(转)
- Eclipse + Gradle实现APK分包
- 给MM修电脑的三个步骤
- mysql bin 分析_mysql bin log 分析
- docker镜像图[更新中]
- mysql sqlyog讲解_MySQL与sqlyog安装教程图文详解
- 国密算法使用-SM3
- Github 插件之 Octotree 报错介绍与解决
- 刀具半径补偿 c语言,数控铣床编程时刀具半径补偿指令及运用
- 高等数学:第九章 重积分(1)二重积分的概念、计算法和应用
- 【算法学习笔记07】贪心算法(Greedy Algorithm)
- 坐标系(Coordinate System)
- 基木鱼html标签,基木鱼 | QA常见问题|【其他类】
- python 开发视频播放网站_python开发微电影视频网站教程附源码
- ubuntu下完全卸载 opencv库 详细教程
- SpringData JPA 之疑难杂症
- C#调用Halcon并输出圆心坐标
- arcgis提取四至权利人--最小外接矩形
热门文章
- Web框架——Flask系列之蓝图Blueprint(二十一)
- jQuery学习笔记系列(一)——入口函数,jQuery对象和DOM对象,jQuery选择器、样式操作、效果(显示隐藏、滑入滑出、淡入淡出、自定义动画、停止动画队列)
- LeetCode 439. 三元表达式解析器
- LeetCode 490. 迷宫(BFS/DFS)
- LeetCode 1234. 替换子串得到平衡字符串(滑动窗口)
- LeetCode 95. 不同的二叉搜索树 II(递归)
- 程序员面试金典 - 面试题 01.08. 零矩阵
- coturn的负载均衡特性_高性能负载均衡
- java的常用引用类、数组、String类
- Power BI 将商业智能数据转换为数据理解