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 相关文章推荐
如何判断图片地址是否失效
Feb 02 Javascript
JS解密入门之凭直觉解
Jun 25 Javascript
JS在IE和FireFox之间常用函数的区别小结
Mar 12 Javascript
php,js,css字符串截取的办法集锦
Sep 26 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
JS按钮闪烁功能的实现代码
Jul 21 Javascript
解析Vue.js中的组件
Feb 02 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 Javascript
使用preload预加载页面资源时注意事项
Feb 03 Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 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
基于文本的访客签到簿
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
vue实现弹幕功能
2019/10/25 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python实现排序算法解析
2018/09/08 Python
python使用Matplotlib画饼图
2018/09/25 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Pandas的数据过滤实现
2021/01/15 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书