jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend


Posted in Javascript onAugust 03, 2010

jQuery.fn.extend 提供了一个扩展机制,可以方便我们通过一个或者多个示例对象来扩展某个对象。如果没有指定被扩展的对象,那么将扩展到自己身上。

jQuery.extend 也可以通过 jQuery.fn.extend 使用, 在 jQuery 中使用很多,用来为一个目标对象扩展成员,扩展的成员来自于一系列参考对象。
这样,如果我们需要为 jQuery.fn 扩展成员 removeData,就可以这样进行。

jQuery.fn.extend( 
{ 
removeData: function( key ) { 
return this.each(function() { 
jQuery.removeData( this, key ); 
}); 
} 
} 
);

extend 的源码如下,因为比较简单,所以没有做太多的精简。
/// <reference path="jQuery-core.js" /> 
2 
3 
4 jQuery.extend = jQuery.fn.extend = function () { 
5 // copy reference to target object 
6 var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; 
7 
8 // 深拷贝情况,第一个参数为 boolean 类型,那么,表示深拷贝,第二个参数为目标对象 
9 if (typeof target === "boolean") { 
deep = target; 
target = arguments[1] || {}; 
// skip the boolean and the target 
i = 2; 
} 
// 如果目标不是对象也不是函数 
if (typeof target !== "object" && !jQuery.isFunction(target)) { 
target = {}; 
} 
// 如果只有一个参数就是扩展自己 
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 object literal values or arrays 
if (deep && copy && (jQuery.isPlainObject(copy) || jQuery.isArray(copy))) { 
var clone = src && (jQuery.isPlainObject(src) || jQuery.isArray(src)) ? src 
: jQuery.isArray(copy) ? [] : {}; 
// 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; 
};
Javascript 相关文章推荐
Jquery AJAX 框架的使用方法
Nov 03 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
javascript定义变量时带var与不带var的区别分析
Jan 12 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
微信小程序 数据遍历的实现
Apr 05 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
Vue父组件调用子组件事件方法
Feb 23 Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 Javascript
vue+animation实现翻页动画
Jun 29 Javascript
JS创建或填充任意长度数组的小技巧汇总
Oct 24 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 #Javascript
SlideView 图片滑动(扩展/收缩)展示效果
Aug 01 #Javascript
JavaScript和ActionScript的交互实现代码
Aug 01 #Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
Aug 01 #Javascript
jquery下onpropertychange事件的绑定方法
Aug 01 #Javascript
关于this和self的使用说明
Aug 01 #Javascript
ajax 缓存 问题 requestheader
Aug 01 #Javascript
You might like
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
php实现图片压缩处理
2020/09/09 PHP
用js实现trim()的解决办法
2013/04/16 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
pip安装python库的方法总结
2019/08/02 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
Python虚拟环境venv用法详解
2020/05/25 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
销售内勤岗位职责
2015/02/10 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
投诉信格式范文
2015/07/02 职场文书
赞美教师的句子
2019/09/02 职场文书
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android