详解jQuery插件开发方式


Posted in Javascript onNovember 22, 2016

jQuery插件开发 

一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法;另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通过选择器获取的jQuery对象实例也能共享该方法。

一、jQuery扩展

1、$.extend(object)

类似于.Net的扩展方法,用于扩展jQuery。然后就可以用$.的方式调用。

$(function(){
 $.extend({ fun1: function () { alert("为jQuery扩展一个fun1函数!"); } });
 $.fun1();
 })

2、$.fn.extend(object)

扩展jQuery的对象。

$.fn.extend({ fun2: function () { alert("执行方法2"); } });
 $("#id1").fun2();

可以用google来看看:

详解jQuery插件开发方式

上面的写法等同于:

$.fn.fun2 = function () { alert("执行方法2"); }
 $(this).fun2();

二、私有域

其定义方式如下:

(function ($) { })(jQuery);
//相当于
var fn = function (xxoo) { };
fn(jQuery);

以下代码弹出123。

$(function(){
 var fn = function (xxoo) { };
 fn(alert(123));
 })

三、定义插件的基本步骤

1、定义作用域

开发一个jQuery插件,首先要把插件的代码与外界隔离开来,外部的代码不允许直接访问插件内部的代码,插件内部的代码也不影响外部。

    //步骤1 定义插件私有作用域

(function ($) {

 })(jQuery);

 这样就能保证插件内部的代码与外界隔离了。

2、扩展jQuery

定义了作用域之后,为了能够让外部调用,就需要将插件扩展到jQuery。

//步骤1 定义私有作用域
 (function ($) {
 //步骤2 插件的扩展方法名称
 $.fn.MyFrame = function (options) {
 
 }
 })(jQuery);

    3、默认值

定义了jQuery插件之后,如果希望某些参数具有默认值,那么可以以这种方式来指定。

//步骤1 定义私有作用域
 (function ($) {
 //步骤3 插件的默认值属性
 var defaults = {
 Id: '#id1',
 };
 //步骤2 插件的扩展方法名称
 $.fn.MyFrame = function (options) {
 //步骤3 合并用户自定义属性,默认属性(如果options为空,则使用defaults)
 var options = $.extend(defaults, options);
 }
 })(jQuery);

     4、支持jQuery选择器

//步骤1 定义私有作用域
 (function ($) {
 //步骤3 插件的默认值属性
 var defaults = {
 Id: '#id1',
 };
 //步骤2 插件的扩展方法名称
 $.fn.MyFrame = function (options) {
 //步骤3 合并用户自定义属性,默认属性(如果options为空,则使用defaults)
 var options = $.extend(defaults, options);
 }
 //步骤4 支持jQuery选择器
 this.each(function () {

 });
 })(jQuery);

    5、支持jQuery的链式调用

//步骤1 定义私有作用域
 (function ($) {
 //步骤3 插件的默认值属性
 var defaults = {
 Id: '#id1',
 };
 //步骤2 插件的扩展方法名称
 $.fn.MyFrame = function (options) {
 //步骤3 合并用户自定义属性,默认属性(如果options为空,则使用defaults)
 var options = $.extend(defaults, options);
 }
 //步骤4 支持jQuery选择器
 //步骤5 支持链式调用(将步骤4返回)
 return this.each(function () {

 });
 })(jQuery);

     6、插件内部方法

//步骤1 定义私有作用域
 (function ($) {
 //步骤3 插件的默认值属性
 var defaults = {
 Id: '#id1',
 };

 //步骤6 在插件里定义函数
 var MyFun = function (obj) {
 alert(obj);
 }

 //步骤2 插件的扩展方法名称
 $.fn.MyFrame = function (options) {
 //步骤3 合并用户自定义属性,默认属性(如果options为空,则使用defaults)
 var options = $.extend(defaults, options);
 }
 //步骤4 支持jQuery选择器
 //步骤5 支持链式调用(将步骤4返回)
 return this.each(function () {
 //步骤6 在插件里定义函数
 MyFun(this);
 });
 })(jQuery);

    由于作用域关系,步骤6的私有函数目前允许的插件内部使用。

 以上就是本文的全部内容,希望对大家有所帮助,谢谢对三水点靠木的支持!

Javascript 相关文章推荐
javascript 写类方式之八
Jul 05 Javascript
老鱼 浅谈javascript面向对象编程
Mar 04 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
Sep 12 Javascript
javascript字符串替换函数如何一次性全部替换掉
Oct 30 Javascript
Js与Jq获取浏览器和对象值的方法
Mar 18 Javascript
纯JS代码实现气泡效果
May 04 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
Nov 01 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
解决vue-cli创建项目的loader问题
Mar 13 Javascript
p5.js入门教程之鼠标交互的示例
Mar 16 Javascript
JavaScript 2018 中即将迎来的新功能
Sep 21 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
Sep 03 Javascript
AngularJS中isolate scope的用法分析
Nov 22 #Javascript
详解js界面跳转与值传递
Nov 22 #Javascript
js实现界面向原生界面发消息并跳转功能
Nov 22 #Javascript
JavaScript面向对象分层思维全面解析
Nov 22 #Javascript
浅析location.href跨窗口调用函数
Nov 22 #Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 #Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 #Javascript
You might like
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
PHP简单日历实现方法
2016/07/20 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
2018/10/20 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
Python连接DB2数据库
2016/08/27 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
python 数据类型强制转换的总结
2021/01/25 Python
Java基础知识面试要点
2016/07/29 面试题
民事上诉状范文
2015/05/22 职场文书
婚宴来宾致辞
2015/07/28 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript