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 相关文章推荐
js自带函数备忘 数组
Dec 29 Javascript
一个挺有意思的Javascript小问题说明
Sep 26 Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
JQuery中DOM事件绑定用法详解
Jun 13 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
js实现获取两个日期之间所有日期的方法
Jun 17 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
Feb 06 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
使用PHP模拟HTTP认证
2006/10/09 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
JQuery 入门实例1
2009/06/25 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
javascript基本算法汇总
2016/03/09 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
Python list和str互转的实现示例
2020/11/16 Python
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
护理助产毕业生的求职信
2014/03/02 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
职工代表大会主持词
2014/04/01 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
医院员工辞职信范文
2015/05/12 职场文书
长江七号观后感
2015/06/11 职场文书
网络营销实训总结
2015/08/03 职场文书
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers