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使用手册之三 CSS操作
Mar 24 Javascript
javascript下过滤数组重复值的代码
Sep 10 Javascript
JavaScript类和继承 this属性使用说明
Sep 03 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
JavaScript中的lastIndexOf()方法使用详解
Jun 06 Javascript
JavaScript入门基础
Aug 12 Javascript
javascript入门教程基础篇
Nov 16 Javascript
jquery实现列表上下移动功能
Feb 25 Javascript
通过bootstrap全面学习less
Nov 09 Javascript
vue商城中商品“筛选器”功能的实现代码
Jul 01 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
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设计模式中单例模式的应用分析
2013/05/15 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
jQuery创建插件的代码分析
2011/04/14 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python小程序实现刷票功能详解
2019/07/17 Python
python缩进长度是否统一
2020/08/02 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
开会迟到检讨书范文
2015/05/06 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP