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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

命令行 浏览器

使用命令行浏览器在 Linux 终端上网浏览 我猜你阅读这篇文章可能是用 Firefox 或基于 Chrome 的浏览器&#xff08;如 Brave&#xff09;&#xff0c;或者&#xff0c;也可能是 Chrome 浏览器或 Chromium。 换句话说&#xff0c;你正在利用基于 GUI 的方式浏览网页。然而&…

重磅来袭,机器人四大家族财务报表大揭秘

来源&#xff1a;华尔街见闻摘要&#xff1a;四大家族实力强劲&#xff0c;在机器人技术与市场占有率上遥遥领先。在2015年之前&#xff0c;四大家族在全球的市占率在50%以上&#xff0c;而随着全球许多细分领域机器人厂商的崛起以及《中国制造2025》推动下国内厂商的发展&…

Python 操作 pymysql 批量 增、删、改、查

github&#xff1a;https://github.com/PyMySQL/PyMySQL Python3 MySQL 数据库连接 - PyMySQL 驱动&#xff1a;https://www.runoob.com/python3/python3-mysql.html pymysql 是线程安全的&#xff08; 搜索 thread&#xff0c;可以看到 thread_safe1&#xff0c;同时函数 th…

大型JavaScript应用程序架构模式

http://www.cnblogs.com/TomXu/archive/2011/12/14/2286225.html转载于:https://www.cnblogs.com/aaa6818162/archive/2012/02/03/2337242.html

Python 定时任务框架 apscheduler

github 地址&#xff1a;https://github.com/agronholm/apscheduler apscheduler 基本概念介绍 说到定时任务&#xff0c;会想起 linux 自带的 crontab &#xff0c;windows 自带的任务计划&#xff0c;都可以实现守时任务。操作系统基本都会提供定时任务的实现&#xff0c;但是…

一文看懂人工智能产业链,未来10年2000亿美元市场

来源&#xff1a;传感器技术摘要&#xff1a;据腾讯研究院统计&#xff0c;截至2017年6月&#xff0c;全球人工智能初创企业共计2617家。美国占据1078家居首&#xff0c;中国以592家企业排名第二&#xff0c;其后分别是英国&#xff0c;以色列&#xff0c;加拿大等国家。根据艾…

Griview中的删除按钮添加“确认提示”

<ItemTemplate><asp:LinkButton ID"LinkButton1" runat"server" CausesValidation"false"CommandName"dele" Text"删除" CommandArgument<%#Eval("EmpNo") %> OnClientClick"return confirm…

如何跟机器人“抢”工作?专家:新的分工将形成

来源&#xff1a;经济日报摘要&#xff1a;随着人工智能技术的深度发展和机器人的广泛应用&#xff0c;人们会从许多传统生产活动中解放出来&#xff0c;有了更多闲暇时间&#xff0c;更强大的支持手段&#xff0c;让生活更有趣和丰富多彩。创新、创意会成为生活和工作中的必需…

hwnd = 0 各种粗心大意啊!

一个简单的对话框程序。运行后出了错误&#xff0c;m_pMainWndNULL了。 CDInputTestDlg dlg; m_pMainWnd &dlg; 百思不得其解&#xff0c;后来终于发现在自己写的一个类的构造函数中。 由于下面一行从上面一行复制过来&#xff0c;只改了前面的参数忘了后面的&#xff0c;…

Scrapy 爬虫教程导航

From&#xff1a;https://brucedone.com/archives/771 8个最高效的 Python 爬虫框架 1. Scrapy。Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。2. PySpider。pyspider 是一个用python实现的功能强大的网络爬虫系统&#xff0c;能在浏览器界面上进…

手指甲上的月牙辨健康,月牙会“丢”也能“长回来”

我以前指甲上只有两个小月牙&#xff0c;都是在大拇指上的。后来听一些姐妹说这是气虚血弱的表现。。。于是我就去问我们楼下80多岁的老中医&#xff08;嘿嘿&#xff01;他和我关系可好了&#xff09;&#xff0c;这位老中医以前是我们这边省中医院内科的专家&#xff0c;退休…

互联网让我们变笨了吗:过去10年关于大脑的11个有趣发现

来源&#xff1a;资本实验室摘要&#xff1a;人类大脑&#xff0c;长期以来被认为科学和宇宙中最复杂的事物之一。鉴于其复杂性&#xff0c;受制于技术限制&#xff0c;过去科学家很难解开其内部运作的秘密&#xff0c;但目前的研究成果表明我们离秘密又近了一些。聚焦前沿科技…

消息中间件 --- Kafka快速入门

消息中间件 --- Kafka 快速入门 消息中间件&#xff1a;https://blog.51cto.com/u_9291927/category33 GitHub: GitHub - scorpiostudio/HelloKafka: HelloKafka Kafka快速入门&#xff08;一&#xff09;--- Kafka简介&#xff1a;https://blog.51cto.com/9291927/2493953Kaf…

asp.net中jQuery $post用法

函数原型&#xff1a;$.post(url, params, callback) url是提交的地址&#xff0c;eg&#xff1a; "sample.ashx" params是参数&#xff0c;eg&#xff1a; { name:"xxx" , id:"001" } callback是回调函数&#xff0c;eg&#xff1a; function…

美研究人员公布“盲动”机器人技术细节

来源&#xff1a;新华网摘要&#xff1a;&#xff17;月&#xff17;日美国麻省理工学院近日发布公报称&#xff0c;该校研究人员最新公布了一种“盲动”机器人的技术细节。这种机器人不需要借助视觉系统&#xff0c;可在崎岖地形中穿行跳跃&#xff0c;有望在危险工作环境中得…

使IE6下PNG背景图片透明的七种方法

PNG图像格式介绍&#xff1a; PNG是20世纪90年代中期开始开发的图像文件存储格式&#xff0c;其目的是企图替代GIF和TIFF文件格式&#xff0c;同时增加一些GIF文件格式所不具备的特性。流式 网络图形格式(Portable Network Graphic Format&#xff0c;PNG)名称来源于非官方的“…

AutoJs 4.1.1 实战教程

Auto.js 中文文档&#xff1a;https://hyb1996.github.io/AutoJs-Docs/#/?id综述 pro 版本支持 Node.js AutoJs Pro 7.0.4-1 实战教程---史上最全快手、抖音极速版 &#xff1a;https://blog.csdn.net/zy0412326/article/details/107180887/&#xff1a;https://blog.csdn.n…

人工智能军备竞赛:一文尽览全球主要国家AI战略

来源&#xff1a;网络大数据摘要&#xff1a;人工智能的迅速发展将深刻改变人类社会和世界的面貌&#xff0c;为了抓住 AI 发展的战略机遇&#xff0c;越来越多的国家和组织已争相开始制定国家层面的发展规划。人工智能的迅速发展将深刻改变人类社会和世界的面貌&#xff0c;为…

EJB3与EJB2的差别

1、Annotation替代了配置文件   凡是EJB2中使用配置文件定义的&#xff1b;EJB3一般都可以使用 annotations定义&#xff08;当然EJB3也支持配置文件定义&#xff09;&#xff1b;   凡是EJB2通过JNDI寻找的资源&#xff08;调用容器中其他EJB、调用环境变量等Resource资源…

Android 读取、接收、发送 手机短信

&#xff1a;https://www.cnblogs.com/ycclmy/tag/android/ 1、Android 读取手机短信 From&#xff1a;https://www.cnblogs.com/ycclmy/p/3193075.html 获取 android 手机短信需要在 AndroidManifest.xml 加权限&#xff1a; <uses-permission android:name"android.…