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 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
JavaScript浏览器选项卡效果
Aug 25 Javascript
解析Javascript小括号“()”的多义性
Dec 03 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
深入浅析AngularJS中的module(模块)
Jan 04 Javascript
jquery采用oop模式class类的使用示例
Jan 22 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
Ext JS 实现建议词模糊动态搜索功能
May 13 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
mpvue小程序仿qq左滑置顶删除组件
Aug 03 Javascript
vue全局使用axios的操作
Sep 08 Javascript
小程序实现筛子抽奖
May 26 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
介绍几个array库的新函数 php
2006/12/29 PHP
PHP注释实例技巧
2008/10/03 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
浅谈Express异步进化史
2017/09/09 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
flask-restful使用总结
2018/12/04 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
行政主管岗位职责
2013/11/18 职场文书
关于爱情的广播稿
2014/01/16 职场文书
求职信范文怎么写
2014/01/29 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
钱学森电影观后感
2015/06/04 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
python函数的两种嵌套方法使用
2022/04/02 Python