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 相关文章推荐
$(document).ready(function() {})不执行初始化脚本
Jun 19 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
浅谈JavaScript Array对象
Dec 29 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
Dec 04 Javascript
Bootstrap源码解读导航(6)
Dec 23 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
原生JS实现$.param() 函数的方法
Aug 10 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
原生js实现九宫格拖拽换位
Jan 26 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
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
5 cool javascript apps
2007/03/24 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
js运动事件函数详解
2016/10/21 Javascript
canvas绘制多边形
2017/02/24 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python实现通讯录功能
2018/02/22 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
对pandas处理json数据的方法详解
2019/02/08 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
生物制药毕业生自荐信
2013/10/16 职场文书
委托书范本
2014/04/02 职场文书
岗位说明书范文
2014/05/07 职场文书
公司承诺书怎么写
2014/05/24 职场文书
本科生自荐信
2014/06/18 职场文书
化工工艺设计求职信
2014/06/25 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
施工安全协议书
2016/03/22 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python
Golang Web 框架Iris安装部署
2022/08/14 Python