1、为每一个DOM对象创建一个插件对象

模板定义:

 (function($) {

     $.pluginName = function(element, options) {

         var defaults = {
foo: 'bar',
onFoo: function() {}
} var plugin = this; plugin.settings = {} var $element = $(element),
element = element; plugin.init = function() {
plugin.settings = $.extend({}, defaults, options);
// code goes here
} plugin.foo_public_method = function() {
// code goes here
} var foo_private_method = function() {
// code goes here
} plugin.init(); } $.fn.pluginName = function(options) {
return this.each(function() {
//为每一个DOM元素创建插件实例
if (undefined == $(this).data('pluginName')) {
var plugin = new $.pluginName(this, options);
$(this).data('pluginName', plugin);
}
}); } })(jQuery);

模板使用:

 $(document).ready(function() {

     // 将插件附加到选择器中的每一个元素(这里通过ID选择器,只有一个元素,下同。)
$('#element').pluginName({'foo': 'bar'}); // 隐式迭代,选择器中每一个元素都会调用该公共方法
$('#element').data('pluginName').foo_public_method(); // 隐式迭代,访问选择器中每一个元素的属性,返回一个数组
$('#element').data('pluginName').settings.foo; });

2、面向对象的模板,只有一个插件实例

模板定义:

 ;(function($) {

     $.pluginName = function(el, options) {

         var defaults = {
propertyName: 'value',
onSomeEvent: function() {}
} var plugin = this; plugin.settings = {} var init = function() {
plugin.settings = $.extend({}, defaults, options);
plugin.el = el;
// code goes here
} plugin.foo_public_method = function() {
// code goes here
} var foo_private_method = function() {
// code goes here
} init(); } })(jQuery);

模板使用:

 $(document).ready(function() {

     // 创建插件实例,并且绑定到$('#element')
var myplugin = new $.pluginName($('#element')); // 调用插件公共方法
myplugin.foo_public_method(); // 获取公有属性的值
myplugin.settings.property; });

3、面向对象的模板,充分利用习惯的链式编程

模板定义:

 ; (function ($) {
//构造函数
$.pluginName = function (el, options) { var defaults = {
propertyName: 'value',
onSomeEvent: function () { }
} var plugin = this; plugin.settings = {} var init = function () {
plugin.settings = $.extend({}, defaults, options);
plugin.el = el;
// code goes here
}
//①:直接方法定义(模板2就是采用这种方式)
plugin.foo_public_method = function () {
//公有方法
// code goes here
} var foo_private_method = function () {
//私有方法
// code goes here
} init(); }
//②:原型方法定义(均为公有方法)
$.pluginName.prototype = {
method1: function () {
},
method2: function () {
}
}; //③:原型方法定义 也可以这么写(均为公有方法)
//$.extend($.pluginName, {
// method1: function () {
// },
// method2: function () {
// }
//}); //在插件中使用
$.fn.pluginName = function (options) {
//实例化一个插件实例,通过执行构造函数初始化
var myPlugin = new $.pluginName(this, options);
//调用公有业务方法
myPlugin.method1();
myPlugin.foo_public_method();
//返回 this,便于链式调用
return this;
} })(jQuery);

模板使用:

 $(document).ready(function () {
//熟悉的链式编程
$('#element').pluginName({
//插件options
}).css({}).animate({});
});

4、构造函数提供给外部使用(有点别扭)

模板定义:

 ; (function ($) {
//构造函数
$.pluginName = function (el, options) {
//去除构造函数中对插件的初始化,转到$.fn.pluginName中初始化。
return $(el).pluginName(options);//该构造函数不是给插件使用,而是给外部调用者使用,需要return以链式编程
}
//②:原型方法定义(均为公有方法)
$.pluginName.prototype = {
method1: function (para1, para2) {
},
method2: function (para1, para2) {
}
}; //③:原型方法定义 也可以这么写(均为公有方法)
//$.extend($.pluginName, {
// method1: function (para1,para2) {
// },
// method2: function (para1,para2) {
// }
//}); //在插件中使用,不会创建插件实例(构造函数是给外部使用的)
$.fn.pluginName = function (options) {
var defaults = {
propertyName: 'value',
onSomeEvent: function () { }
} var settings = {} var init = function () {//私有方法
settings = $.extend({}, defaults, options);
// code goes here
} var foo_private_method = function () {
//私有方法
// code goes here
} init(); //调用业务方法
$.pluginName.method1(para1, para2);
$.pluginName.method2(para1, para2); //返回 this,便于链式调用
return this;
} })(jQuery);

模板使用:

 $(document).ready(function () {
//熟悉的链式编程
$('#element').pluginName({
//插件options
}).css({}).show({}); //构造函数提供该外部使用,所以相当于
new $.pluginName($('#element'), {
//插件options
}).css({}).animate({});
});

总结

正如标题所说的那样,每种模板各有特点,但是最具可读性的还是第三种。当然了,模板只是一个套路,修修改改就又会变成另外一种模板了,上面只是总结了比较常见的模板格式,仅供参考。

不错的参考

segmentfault jQuery 模板

jQuery Biilerplate

jQuery 插件模板的更多相关文章

  1. 我最喜欢的jQuery插件模板

    我使用jQuery已经有相当长的时间了,并且我会常常为它写一些插件(plugin).我尝试过用不同的方式去写,现在这个模板是我最喜欢的: 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  2. 关于jquery插件模板的两个案例

    /** * jquery tips 提示插件 jquery.tips.js v0.1beta * * 使用方法 * $(selector).tips({ //selector 为jquery选择器 * ...

  3. JQuery插件模板

    (function($){ $.fn.插件名 = function(settings){ var defaultSettings = { } /* 合并默认参数和用户自定义参数 */settings ...

  4. 简记 jQuery 插件模板

    /** * @lisence jquery plugin demo v1.0.0 * * author: Jeremy Yu * * description: * this is a jquery p ...

  5. jQuery插件编写及链式编程模型小结

    JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...

  6. jQuery插件编写及链式编程模型

    jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...

  7. 前端模板文件化jQuery插件 $.loadTemplates

    工作中使用前端模板引擎,如 artTemplate.jsRender,来替代拼接字符串. 可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题. 所以将多个 ...

  8. 出位的template.js 基于jquery的模板渲染插件

    找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...

  9. javascript&&jquery编写插件模板

    javascrpt插件编写模板 这里不分享如何编写插件,只留一个框架模板,使用面向对象的形式进行编写,方便管理 ;(function(window,document){ function FnName ...

随机推荐

  1. linux process 相关命令

    1.显示指定用户信息:ps -u root 2.显示所有进程信息,连同命令行:ps -ef 3. ps 与grep 常用组合用法,查找特定进程:ps -ef|grep ssh 4. 把所有进程显示出来 ...

  2. C#基于AE组件二次开发常见问题

    由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...

  3. java web-----MVC设计模式

    一,MVC将代码分为三个部分,分别为视图(jsp),模型(javaBean),控制部分(servlet); 视图基本为 jsp 文件,主要内容为界面的html代码,负责显示界面: 模型为 javaBe ...

  4. js闭包的使用例子

    网上关于闭包的介绍太多,这就导致了泛滥,对于新手来说,网上好多讲解就说了闭包是啥,还都是用下面这种例子: 我的天啊,我们都看了不知道多少遍了,看完有啥用?在什么场合下用啊? 于是我翻阅各种资料,自己总 ...

  5. Eat that Frog

    Eat that Frog,中文翻译过来就是“吃掉那只青蛙”.不过这里并不是讨论怎么去吃青蛙,而是一种高效的方法. Eat that Frog是Brian Tracy写的一本书(推荐阅读).这是一个很 ...

  6. easyui 初体验

    简介 jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的javas ...

  7. css部分基础归纳--学习笔记

    (1)css不区别大小写: (2)颜色值:颜色值可以写成RGB格式,如:color:rgb(255,100,0),也可以写成十六进制格式,如:color:#ff0000.如果十六进制的值是成对重复的可 ...

  8. CentOS 6.5升级Python后yum不可用的解决方案

    因开发需要,今天把CentOS 6.5自带的Python2.6.6升级到了Python2.7.3.按照如下步骤进行升级 1.查看当前系统python的版本 python -V 2.下载2.7.3版本的 ...

  9. 如何把jar包放到本地maven仓库中

    以前开发过程中也碰到过maven项目中需要引用其它jar包的情况,当时由于对maven还不熟悉,所以使用了在本地搭建nexus或者手动添加jar包的方法,两者都不是很方便. 如今因为淘宝的工作需要,又 ...

  10. 【InstallShield】 为什么卸载后有的文件没有删掉

    1.Component的属性Permanent设置为Yes. 2.Component的ID为空. 3.Component被其他应用程序或者Feature使用. 4.设置了一个Condition,在安装 ...