前两个是jQuery插件,后面2个是以对象的形式开发,都类似。

写法一

  1. (function($, window){
  2. // 初始态定义
  3. var _oDialogCollections = {};
  4.  
  5. // 插件定义
  6. $.fn.MNDialog = function (_aoConfig) {
  7. // 默认参数,可被重写
  8. var defaults = {
  9. // string
  10. sId : "",
  11. // num
  12. nWidth : 400,
  13. // bollean
  14. bDisplayHeader : true,
  15. // object
  16. oContentHtml : "",
  17. // function
  18. fCloseCallback : null
  19. };
  20.  
  21. var _oSelf = this,
  22. $this = $(this);
  23.  
  24. // 插件配置
  25. this.oConfig = $.extend(defaults, _aoConfig);
  26.  
  27. // 初始化函数
  28. var _init = function () {
  29. if (_oDialogCollections) {
  30. // 对于已初始化的处理
  31. // 如果此时已经存在弹框,则remove掉再添加新的弹框
  32. }
  33. // 初始化弹出框数据
  34. _initData();
  35. // 事件绑定
  36. _loadEvent();
  37. // 加载内容
  38. _loadContent();
  39. }
  40. // 私有函数
  41. var _initData = function () {};
  42. var _loadEvent = function () {};
  43. var _loadContent = function () {
  44. // 内容(分字符和函数两种,字符为静态模板,函数为异步请求后组装的模板,会延迟,所以特殊处理)
  45. if($.isFunction(_oSelf.oConfig.oContentHtml)) {
  46. _oSelf.oConfig.oContentHtml.call(_oSelf, function(oCallbackHtml) {
  47. // 便于传带参函数进来并且执行
  48. _oSelf.html(oCallbackHtml);
  49. // 有回调函数则执行
  50. _oSelf.oConfig.fLoadedCallback && _oSelf.oConfig.fLoadedCallback.call(_oSelf, _oSelf._oContainer$);
  51. });
  52. } else if ($.type(_oSelf.oConfig.oContentHtml) === "string") {
  53. _oSelf.html(_oSelf.oConfig.oContentHtml);
  54. _oSelf.oConfig.fLoadedCallback && _oSelf.oConfig.fLoadedCallback.call(_oSelf, _oSelf._oContainer$);
  55. } else {
  56. console.log("弹出框的内容格式不对,应为function或者string。");
  57. }
  58. };
  59.  
  60. // 内部使用参数
  61. var _oEventAlias = {
  62. click : 'D_ck',
  63. dblclick : 'D_dbl'
  64. };
  65.  
  66. // 提供外部函数
  67. this.close = function () {
  68. _close();
  69. }
  70.  
  71. // 启动插件
  72. _init();
  73.  
  74. // 链式调用
  75. return this;
  76. };
  77. // 插件结束
  78. })(jQuery, window);
  79.  
  80. //调用
  81. var MNDialog = $("#header").MNDialog({
  82. sId : "#footer", //覆盖默认值
  83. fCloseCallback : dialog,//回调函数
  84. oContentHtml : function(_aoCallback){
  85. _aoCallback(_oEditGrpDlgView.el);
  86. }
  87. }
  88. });
  89. // 调用提供的函数
  90. MNDialog.close;
  91. function dialog(){
  92.  
  93. }

分析

1. 自调用匿名函数

  1. (function($, window) {
  2. // jquery code
  3. })(jQuery, window);

  用处:通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。

2. 匿名函数为什么要传入window

通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery.min.js:

  1. (function(a,b){})(jQuery, window); // jQuery被优化为a, window 被优化为 b

3. 全局变量this定义

  1. var _oSelf = this,
  2. $this = $(this);

  使得在插件的函数内可以使用指向插件的this

4. 插件配置

  1. this.oConfig = $.extend(defaults, _aoConfig);

  设置默认参数,同时也可以再插件定义时传入参数覆盖默认值

5. 初始化函数

一般的插件会有init初始化函数并在插件的尾部初始化

6. 私有函数、公有函数

私有函数:插件内使用,函数名使用”_”作为前缀标识共有函数:可在插件外使用,函数名使用”this.”作为前缀标识,作为插件的一个方法供外部使用

7. return this

最后返回jQuery对象,便于jQuery的链式操

jQuery插件写法总结以及面向对象方式写法总结的更多相关文章

  1. [转]jQuery插件写法总结以及面向对象方式写法

    本文转自:http://www.xuanfengge.com/jquery-plug-in-written-summary-and-summary-of-writing-object-oriented ...

  2. jQuery插件实践之轮播练习(一)

    所有文章搬运自我的个人主页:sheilasun.me 因为从来没写过jQuery插件,所以本文要通过一个轮播的例子,练习jQuery插件的写法. 新建插件文件 在讨论细节之前,先新建插件文件(当然也可 ...

  3. 第7章 jQuery插件的使用和写法

    第7章 jQuery插件的使用和写法 插件又称扩展,是一种遵循一定规范的应用程序接口写出来的程序. 插件的编写思想基于面向对象. 获取最新的插件可以查看jquery官网:http://plugins. ...

  4. jQuery 插件写法2

    转载:http://www.xuanfengge.com/jquery-plug-in-written-summary-and-summary-of-writing-object-oriented-m ...

  5. jquery插件的写法

    jquery插件及zepto插件,写法上有些区别. 区别点: 1.自定义事件的命名空间 jq的时间命名空间是用点“.”,而zepto是用冒号“:” 如 //jquery $(this).trigger ...

  6. jQuery 插件写法

    一.jQuery插件的类型 1. jQuery方法 很大一部分的jQuery插件都是这种类型,由于此类插件是将对象方法封装起来,在jQuery选择器获取jQuery对象过程中进行操作,从而发挥jQue ...

  7. JQuery插件的写法和规范

    首先,在具体说明编写插件之前,我们先假定一个使用场景:有一个HTML页面(或.aspx页面),页面上放置了一个5行3列的表格,即:<table></table>标记,具体代码如 ...

  8. JQuery插件的写法 (转:太棒啦!)

    JQuery插件写法的总结 最近Web应用程序中越来越多地用到了JQuery等Web前端技术.这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率.JQuery本身提 ...

  9. Jquery插件写法及extentd函数

    JQuery插件写法 JQuery插件又分为类扩展方法和对象扩展方法两种,类插件是定义在JQuery命令空间的全局函数,直接通过可调用,如可调用,如可调用,如.ajax():对象插件是扩展JQuery ...

随机推荐

  1. 【原】python中文文本挖掘资料集合

    这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加:   1.http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7% ...

  2. C 语言学习的第 05 课:C 语言基础(01)

    C语言程序中的绝大部分应该记录在以.c作为扩展名的文件里,这种文件叫做C语言    程序的源文件. C语言中还包括以.h作为扩展名的文件,这种文件叫做头文件. C语言中的四则运算: 加:+ 减:- 乘 ...

  3. RabbitMQ消息队列在PHP下的应用

    消息队列的实现中,RabbitMQ以其健壮和可靠见长.公司的项目中选择了它作为消息队列的实现.关于MQ的机制和原理网上有很多文章可以看,这里就不再赘述,只讲几个比较容易混淆的问题 1,binding ...

  4. Flyme适配源码更新命令,轻松完成打包

    第一次已经同步了所有源码(花了很长时间),第一次已经连接手机进行了插桩和解reject,那么第二次还需要这么麻烦吗?答案是:NO ! 1.官方源码,执行如下命令可以实现: repo sync -c 2 ...

  5. 移动端浏览器和微信浏览器上禁止body的滚动条

    一般禁止body滚动的做法就是设置overflow:hidden. 但是很奇怪的发现在移动端浏览器和微信浏览器上这个不起作用,然后我分析了我的写法,就是在body上加了一个class去定义属性,然后改 ...

  6. Nginx简易配置文件(一)(静态页面及PHP页面解析)

    user nobody nobody; worker_processes 4; error_log logs/error.log; pid logs/nginx.pid; events { use e ...

  7. top命令

    TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中C ...

  8. CSS书写顺序

    CSS书写顺序 1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, margin, padding)3. ...

  9. Logstash-5.0同步.json文件到ElasticSearch-5.0配置文件

    logstash/conf/input-file.conf内容如下: input { file { #监听文件的路径. path => ["E:/data_json/*.json&qu ...

  10. Node.js入门笔记(5):案例两则

    案例分析:前端自动化 1. 实现一个自动创建前端项目文件的js 通过node.js自动创建前端项目目录,包括js目录,js目录css目录,index.html和对应的内容. 初步的代码如下: var ...