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 相关文章推荐
Ext javascript建立超链接,进行事件处理的实现方法
Mar 22 Javascript
纯文字版返回顶端的js代码
Aug 01 Javascript
javascript实现炫酷的拖动分页
May 11 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
Aug 14 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
Sep 06 Javascript
JS中的eval 为什么加括号
Apr 13 Javascript
js闭包学习心得总结
Apr 17 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
Aug 16 Javascript
Vue cli构建及项目打包以及出现的问题解决
Aug 27 Javascript
通过vue-cli3构建一个SSR应用程序的方法
Sep 13 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
Jan 18 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高级对象构建 工厂模式的使用
2012/02/05 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
php自定义分页类完整实例
2015/12/25 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
PHP abstract与interface之间的区别
2013/11/11 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
js实现简单点赞操作
2020/03/17 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
python相对企业语言优势在哪
2020/06/12 Python
Python bisect模块原理及常见实例
2020/06/17 Python
python 利用zmail库发送邮件
2020/09/11 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
《水上飞机》教学反思
2014/04/10 职场文书
工程负责人任命书
2014/06/06 职场文书
护士工作失误检讨书
2014/09/14 职场文书
2014年政教处工作总结
2014/12/20 职场文书
三八妇女节主持词
2015/07/04 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python