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 相关文章推荐
20款效果非常棒的 jQuery 插件小结分享
Nov 18 Javascript
js实现网站首页图片滚动显示
Feb 04 Javascript
jquery的live使用注意事项
Feb 18 Javascript
Extjs实现下拉菜单效果
Apr 01 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
Aug 05 Javascript
js中用cssText设置css样式的简单方法
Sep 19 Javascript
js Canvas绘制圆形时钟教程
Feb 06 Javascript
深入探究node之Transform
Jul 20 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
Oct 12 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
聊聊Vue中provide/inject的应用详解
Nov 10 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
星际玩家的三大定律
2020/03/04 星际争霸
一些花式咖啡的配方
2021/03/03 冲泡冲煮
yii2简单使用less代替css示例
2017/03/10 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
python实现网页录音效果
2020/10/26 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
XML文档面试题
2015/08/05 面试题
什么是组件架构
2016/05/15 面试题
群众路线教育实践活动心得体会
2014/03/07 职场文书
就业协议书范本
2014/04/11 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
妇女干部培训方案
2014/05/12 职场文书
投标诚信承诺书
2014/05/26 职场文书
药剂专业自荐书
2014/06/20 职场文书
大学生实习证明范本
2014/09/19 职场文书
党委工作总结2015
2015/04/27 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
MySQL慢查询的坑
2021/04/28 MySQL