jQuery插件扩展extend的简单实现原理


Posted in Javascript onJune 24, 2016

相信每位前端的小伙伴对jQuery都不陌生吧,它最大的魅力之一就是有大量的插件,去帮助我们更轻松的实现各种功能。

前几天晚上,闲来无事,就自己动手写了个简单的jQuery插件,功能很简单,只是让选定的元素高亮,但是其中的一些思想,还是很值得学习的,可以戳这里查看代码。

本文不聊怎么写jQuery插件,我们聊聊怎么去实现jQuery的插件扩展功能,extend是怎么实现把我们写的插件挂载到jQuery上的。(大牛可以出门右拐......)

我们可以模拟创建一个迷你jQuery。

var $ = {};

好的,就这么简单......

下面我们要在这个对象上挂载一个extend方法,用于让开发者为我这个对象添加功能和方法。

var $ = {
   extend:function(ob){
      /**暂时不管里面写什么**/
   } 
 }

现在,我们就在$这个对象上添加了一个extend方法,外部可以通过$.extend(obj)的方法去调用它。

假设现在我们要往$上面添加一个方法,也就是添加一个插件,我们只需要:

$.extend({
   myFunction:function(obj){
     //do something....   
   }
 })

现在只需要$.myFunction(obj);就可以实现方法内所要做的事了。

问题的关键来了,我们明明是把方法挂载在$.extend上,为什么可以直接用$去调用?这里就要看看extend内部是怎么处理传入的obj了。

var $ = {
  extend:function(obj){
    for(var key in obj){
      this.__proto__[key]=obj[key];
    }
  }
}

原来,extend把传入的obj遍历,然后挂到$的__proto__上了,这样,$随时都能够调用原型上的方法。

当然,实际上jQuery的extend实现比这个复杂的多,这里只是介绍了jQuery插件底层实现的基本思想,把公共的方法挂载到对象的原型上。

具体的插件编写可以看看文章开头的链接,我把插件编写的每个细节都做了注释,大家相互学习!

以上就是小编为大家带来的jQuery插件扩展extend的简单实现原理全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
Javascript的构造函数和constructor属性
Jan 09 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
javascript相关事件的几个概念
May 21 Javascript
javascript判断复选框是否选中的方法
Oct 16 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
JQUERY表单暂存功能插件分享
Feb 23 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
解决iView Table组件宽度只变大不变小的问题
Nov 13 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
Jun 24 #Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 #Javascript
jQuery模仿单选按钮选中效果
Jun 24 #Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
Jun 24 #Javascript
jQuery如何获取动态添加的元素
Jun 24 #Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
Jun 24 #Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 #Javascript
You might like
ajax缓存问题解决途径
2006/12/06 PHP
PHP中读写文件实现代码
2011/10/20 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python简单实现操作Mysql数据库
2018/01/29 Python
Python中存取文件的4种不同操作
2018/07/02 Python
python 自定义装饰器实例详解
2019/07/20 Python
python3实现高效的端口扫描
2019/08/31 Python
Python自带的IDE在哪里
2020/07/01 Python
python从Oracle读取数据生成图表
2020/10/14 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
校三好学生主要事迹
2014/01/11 职场文书
优秀小学生家长评语
2014/01/30 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
商务考察邀请函模板
2015/02/02 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android