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 相关文章推荐
关于document.cookie的使用javascript
Oct 29 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
JavaScript内存管理介绍
Mar 13 Javascript
纯javascript代码实现计算器功能(三种方法)
Sep 07 Javascript
jQuery+css实现的切换图片功能代码
Jan 27 Javascript
JavaScript代码生成PDF文件的方法
Feb 26 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 Javascript
Vue 使用formData方式向后台发送数据的实现
Apr 14 Javascript
Vue 实现前端权限控制的示例代码
Jul 09 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 Javascript
深入了解Vue3模板编译原理
Nov 19 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
VOLVO车载收音机
2021/03/02 无线电
PHP中防止SQL注入实现代码
2011/02/19 PHP
php画图实例
2014/11/05 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
Django重设Admin密码过程解析
2020/02/10 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
闭幕式主持词
2014/04/02 职场文书
尊师重教演讲稿
2014/09/04 职场文书
2014年班组长工作总结
2014/11/20 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
详解SQL的窗口函数
2022/04/21 Oracle