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 相关文章推荐
改进版通过Json对象实现深复制的方法
Oct 24 Javascript
js文本框输入点回车触发确定兼容IE、FF等
Nov 19 Javascript
javascript创建cookie、读取cookie
Mar 31 Javascript
js获取元素的外链样式的简单实现方法
Jun 06 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
Oct 26 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
jquery+css3实现熊猫tv导航代码分享
Feb 12 jQuery
javascript刷新父页面方法汇总详解
Oct 10 Javascript
vue2.x数组劫持原理的实现
Apr 19 Javascript
vue总线机制(bus)知识点详解
May 10 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jQuery实现预加载图片的方法
2015/03/17 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python 生成器协程运算实例
2017/09/04 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Flask处理Web表单的实现方法
2021/01/31 Python
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
试用期员工考核制度
2014/01/22 职场文书
服务员岗位职责
2014/01/29 职场文书
上课迟到检讨书
2014/02/19 职场文书
2015高考寄语集锦
2015/02/27 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python