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 常用关键字列表集合
Dec 04 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
Sep 09 Javascript
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
微信小程序 swiper组件详解及实例代码
Oct 25 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
Aug 04 Javascript
vue.js项目打包上线的图文教程
Nov 16 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
Angular6项目打包优化的实现方法
Dec 15 Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 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实现的简单日历类
2014/11/29 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
javascript cookies操作集合
2010/04/12 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
在Python中处理时间之clock()方法的使用
2015/05/22 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
综治维稳工作汇报
2014/10/27 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
MySQL数据库简介与基本操作
2022/05/30 MySQL