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 相关文章推荐
在网页中控制wmplayer播放器
Jul 01 Javascript
HTML页面如何象ASP一样接受参数
Feb 07 Javascript
JavaScript 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
Node.js的特点和应用场景介绍
Nov 04 Javascript
js闭包的用途详解
Nov 09 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
Nov 29 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 Javascript
Angular2 之 路由与导航详细介绍
May 26 Javascript
基于Vuejs和Element的注册插件的编写方法
Jul 03 Javascript
JavaScript实现打印星型金字塔功能实例分析
Sep 27 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
Jun 24 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实现用户认证及管理完全源码
2007/03/11 PHP
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
PHP输出时间差函数代码
2013/01/28 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
详解python播放音频的三种方法
2019/09/23 Python
python轮询机制控制led实例
2020/05/03 Python
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
为什么需要版本控制?
2013/08/08 面试题
大学军训决心书
2015/02/05 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
CSS的calc函数用法小结
2022/06/25 HTML / CSS