第一种方法:

在很多基于jQuery或基于Zepto的插件中,在立即函数执行前面会加上";"这个符号。

这是为了防止前面的其他插件没有正常关闭。

在立即执行函数执行时,会一般会传入jQuery,window等。举个例子:

;(function($,window,undefined){
//.....
})(jQuery,window)

window传递进来作为局部变量存在,而非全局变量,这样可以加快解析流程,以及影响最小化。

undefined没有传进来,以便可以确保此undefined是真正的undefined。因为ECMAScript3里的undefined是可以修改的,ECMAScript5不可以修改。

下面是自定义jQuery插件的规范:

;(function($,window,undefined){
var pluginName = "chaojidan",
defaults = {
name:"dandan"
};
function Plugin(element, options){
this.element = element;
this.options = $.extend( {} , defaults,options );
this._name = pluginName;
this._defaults = defaults;
this.init();
}
Plugin.prototype.init = function(){
//初始化插件
};
$.fn[pluginName] = function(options){ //真正的插件包装,防止出现多个实例
return this.each(function(){
if(!$.data(this,"plugin_"+pluginName)){
$.data(this,"plugin_"+pluginName, new Plugin(this, options));
}
});
} })(jQuery,window)

调用此插件:

$("#elem").chaojidan({name:"xiaoxiao"});  

第二种方法:

;(function($,window,undefined){
var myObject = {
init : function(options, elem){
this.options = $.extend({}, this.options, options);
this.elem = elem;
this.$elem = $(elem);
this._build();
return this;
},
options:{
name:"dandan"
},
_build:function(){ },
myMethod:function(){ }
};
if(typeof Object.create != "function"){
Object.create = function(o){
function F(){}
F.prototype = o;
return new F();
}
}
$.plugin = function(name, object){
$.fn[name] = function(options){
return this.each(function(){
if(!$.data(this,name)){
$.data(this,name,Object.create(object).init(options,this))
}
});
}
}
    $.plugin("chaojidan",myObject);
})(jQuery,window);

调用方式:

$("#elem").chaojidan({name:"xiaoxiao"}); 

对于上面的两种方法,我们定义插件时,都传递了带有默认值的对象字面量给$.extend()。然而,如果我们想自定义此默认值的对象字面量,也就是说,用户可以重写此默认对象字面量,那么我们该如何来写呢?

其实非常简单,我们只要把此默认对象字面量这样赋值就行了。

$.fn.pluginName.options = {
  name:"dandan"
}

这样,用户能够重写全局默认配置,达到插件构造的灵活性。

加油! 

最新文章

  1. PHP函数整理(二)
  2. 微信小程序如何设置开发者和体验者
  3. CentOS通过日志反查入侵
  4. Python路径总结
  5. ubuntu 下安装sh 文件
  6. 一次plsql 问题记录
  7. 总结下js中匿名函数的写法~好几天没写博客了。。。
  8. JavaScript的DOM编程--03--读写属性节点
  9. Django 1.11 release note简明解读
  10. SSRS报表服务随笔(rdl报表服务)-报表参数
  11. 难以理解的AQS(上)
  12. styled-components的基本使用
  13. Kibana简单使用教程
  14. python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
  15. 【leetcode-71】 简化路径
  16. Session 在分布式系统中实现方式
  17. 20135327郭皓--Linux内核分析第六周 进程的描述和进程的创建
  18. iOS 7 UI 过渡指南 - 開始之前(iOS 7 UI Transition Guide - Before You Start)
  19. java中的标识符、关键字、保留字
  20. Apache ActiveMQ 学习一

热门文章

  1. Hash校验
  2. Linux命令(22)find的使用
  3. MVC4中 访问webservice 出现无法找到资源的错误
  4. Lambda演算 - 简述Y组合子的作用
  5. Sql Server Job 简单使用
  6. C 指针疑虑
  7. d3安装异常
  8. 关于litJson的System.InvalidCastException
  9. delphi.位操作
  10. 前端开发根据url进行页面跳转控制以及实现菜单栏手风琴效果