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. [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】

    第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...

  2. ASP.NET Web Service如何工作(2)

    ASP.NET Web Service如何工作(2) [日期:2003-06-26] 来源:CSDN  作者:sunnyzhao(翻译) [字体:大 中 小] HTTP管道一旦调用了.asmx句柄,便 ...

  3. Server Error The server encountered an error and could not complete your request. 新建站点模版失败

    500 Server Error Error: Server Error The server encountered an error and could not complete your req ...

  4. 08_Spring实现action调用service,service调用dao的过程

    [工程截图] [PersonDao.java] package com.HigginCui.dao; public interface PersonDao { public void savePers ...

  5. OpenJudge 2792 集合加法

    1.链接地址: http://bailian.openjudge.cn/practice/2792 2.题目: 总Time Limit: 3000ms Memory Limit: 65536kB De ...

  6. HTML5新增标签属性

    ----- 新类型表单 - email 自动校验输入的是不否是email 邮箱:<input type="email" name="user_email" ...

  7. 跟我一起学Vim补全神级插件--YouCompleteMe

    最近重拾Vim,编译部署来补全插件YCM,这个插件的补全效果和在写C代码的时候的自动提示错误信息等还是十分棒的,写点心得下来,也算给自己做个备忘. 快速安装: 首先参考我的.vimrc配置,用Vund ...

  8. 解决Ubuntu和Windows的文件乱码问题(转载)

    解决Ubuntu和Windows的文件乱码问题(debian也通用) 1.转换文件内容编码   Windows下天生的纯文本文件,其中文编码为GBK,在Ubuntu下显示为乱码,可以使用iconv命令 ...

  9. MVC控制器给View返回实体

    前言 这几天把vs12更新到了vs12 5了,因为发现我之前装的12有问题,没有mvc,之后就从itellyou上下载了12的update5更新了一下.说实话,从开发到现在,自己只是平时自己玩用mvc ...

  10. 扩展:gridview 空数据时显示表头

    2015年7月14日16:50:06  Gridview 默认展示数据时,若数据为空,则表格不显示,显示不美观. 针对此问题进行扩展: using System.Web.UI.WebControls; ...