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 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
Aug 04 Javascript
jQuery操作基本控件方法实例分析
Dec 31 Javascript
jquery点击切换背景色的简单实例
Aug 25 Javascript
解决JQuery全选/反选第二次失效的问题
Oct 11 jQuery
Node.js创建Web、TCP服务器
Dec 05 Javascript
jquery实现动态添加附件功能
Oct 23 jQuery
Node.js + express基本用法教程
Mar 14 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
May 30 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
微信小程序实现语音识别转文字功能及遇到的坑
Aug 02 Javascript
el-form 多层级表单的实现示例
Sep 10 Javascript
Vue3为什么这么快
Sep 23 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
秸秆管理实施方案
2014/03/15 职场文书
爱我中华教学反思
2014/04/28 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
校车安全管理责任书
2015/05/11 职场文书
婚宴主持词
2015/06/30 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书