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最新动画教程+iso光盘下载
Jan 22 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
jquery对ajax的支持介绍
Dec 10 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
浅谈jquery事件处理
Apr 24 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
json数据处理及数据绑定
Jan 25 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
vue响应式系统之observe、watcher、dep的源码解析
Apr 09 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
关于layui表单中按钮自动提交的解决方法
Sep 09 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
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
php实现的双向队列类实例
2014/09/24 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
python基础教程之自定义函数介绍
2014/08/29 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
pyenv命令管理多个Python版本
2017/03/26 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python中format()格式输出全解
2019/04/12 Python
python使用requests.session模拟登录
2019/08/09 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
Collection和Collections的区别
2016/05/02 面试题
在校硕士自我鉴定
2014/01/23 职场文书
买房委托公证书
2014/04/08 职场文书
护士求职信范文
2014/05/24 职场文书
会计工作能力自我评价
2015/03/05 职场文书
奠基仪式致辞
2015/07/30 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
Redis如何实现分布式锁
2021/08/23 Redis