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 相关文章推荐
js查找节点的方法小结
Jan 13 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
js数组如何添加json数据及js数组与json的区别
Oct 27 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
Nov 03 Javascript
Node.js中process模块常用的属性和方法
Dec 13 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
微信小程序使用Socket的实例
Sep 19 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
Aug 20 Javascript
编写一个javascript元循环求值器的方法
Apr 14 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
php4的彩蛋
2006/10/09 PHP
php去掉文件前几行的方法
2015/07/29 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python Sleep休眠函数使用简单实例
2015/02/02 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Django内容增加富文本功能的实例
2017/10/17 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
特步官方商城:Xtep
2017/03/21 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
个性大学生自我评价
2013/12/04 职场文书
教师一岗双责责任书
2014/04/16 职场文书
学习普通话的体会
2014/11/07 职场文书
赤壁观后感(2)
2015/06/15 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
Python各协议下socket黏包问题原理
2022/04/12 Python
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers