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 相关文章推荐
去除链接虚线全面分析总结
Aug 15 Javascript
jquery 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
可自定义速度的js图片无缝滚动示例分享
Jan 20 Javascript
javascript 中的 delete及delete运算符
Nov 15 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
Nov 22 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
微信小程序 Page()函数详解
Oct 17 Javascript
微信小程序商品到详情的实现
Jun 27 Javascript
vue2 全局变量的设置方法
Mar 09 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
Vue中jsx不完全应用指南小结
Nov 01 Javascript
浅析JavaScript预编译和暗示全局变量
Sep 03 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
php SQL Injection with MySQL
2011/02/27 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python sys.argv[]用法实例详解
2018/05/25 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
详解python的四种内置数据结构
2019/03/19 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
中科软笔试题和面试题
2014/10/07 面试题
弘扬职业精神演讲稿
2014/03/20 职场文书
财务担保书范文
2014/04/02 职场文书
食品安全汇报材料
2014/08/18 职场文书
教师求职信怎么写
2015/03/20 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers