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 相关文章推荐
js 页面关闭前的出现提示的实现代码
May 25 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
Sep 29 Javascript
选择器中含有空格在使用示例及注意事项
Jul 31 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
用jquery写的一个万年历(自写)
Jan 20 Javascript
jquery ajax跨域解决方法(json方式)
Feb 04 Javascript
node.js中的socket.io的广播消息
Dec 15 Javascript
JavaScript中定义函数的三种方法
Mar 12 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
Apr 15 Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 Javascript
简单谈谈json跨域
Mar 13 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
HTML的form表单和django的form表单
2019/07/25 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
英文自荐信格式
2013/11/28 职场文书
毕业生自荐书
2013/12/18 职场文书
银行职员思想汇报
2013/12/31 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
爱国主题班会教案
2015/08/14 职场文书
村官2015年度工作总结
2015/10/14 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
Redis 异步机制
2022/05/15 Redis