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 相关文章推荐
JQuery Easyui Tree的oncheck事件实现代码
May 28 Javascript
jQuery UI Autocomplete 体验分享
Feb 14 Javascript
JS实现的通用表单验证插件完整实例
Aug 20 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
利用Jasmine对Angular进行单元测试的方法详解
Jun 12 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
javascript流程控制语句集合
Sep 18 Javascript
vue双向绑定及观察者模式详解
Mar 19 Javascript
vue百度地图 + 定位的详解
May 13 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
vue实现扫码功能
Jan 17 Javascript
微信小程序中的上拉、下拉菜单功能
Mar 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
PHP的几个常用数字判断函数代码
2012/04/24 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python实现聚类算法原理
2018/02/12 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
应付会计岗位职责
2013/12/12 职场文书
小学端午节活动方案
2014/03/13 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
2014年工商所工作总结
2014/12/09 职场文书
课程设计感想范文
2015/08/11 职场文书
公司管理建议书
2015/09/14 职场文书
岗位聘任协议书
2015/09/21 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL