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技术实现的web小游戏(不含网游)
Jun 12 Javascript
jQuery 设置 CSS 属性示例介绍
Jan 16 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
Mar 07 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
AngularJS自动表单验证
Feb 01 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
Jul 13 Javascript
React Native 集成jpush-react-native的示例代码
Aug 16 Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 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 数学运算验证码实现代码
2009/10/11 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
python利用opencv保存、播放视频
2020/11/02 Python
Python安装Bs4的多种方法
2020/11/28 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
销售员求职个人的自我评价
2014/02/19 职场文书
大课间体育活动方案
2014/03/12 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
《分一分》教学反思
2014/04/13 职场文书
七夕活动策划方案
2014/08/16 职场文书
抢劫罪辩护词
2015/05/21 职场文书
不同意离婚上诉状
2015/05/23 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书