1、定义全局插件
<script type="text/javascript">
/*** 直接通过$.方法名称就可以定义一个全局的插件,这种定义带来的问题
* 1、一般插件都需要通过一个独立的js文件来存储,命名的规则的确定
* 2、如果将来$这个符号被jQuery.noConfilct之后,如何保证还能继续使用
*/
$.say = function(hello) {
alert("hello "+hello);
}
$(function() {
$.say("ok");
})
</script>
2、通过闭包方式定义插件
<script type="text/javascript">
/**
* 直接通过$.方法名称就可以定义一个全局的插件,这种定义带来的问题
* 1、一般插件都需要通过一个独立的js文件来存储,命名的规则的确定
* 2、如果将来$这个符号被jQuery.noConfilct之后,如何保证还能继续使用
* 解决方式:1、不再通过$,而是直接通过jQuery来调用,但是会增加工作量
* 2、通过闭包来解决,将插件的定义全部放到一个闭包中
* 3、如何为插件确定参数,如果一个方法存在7个参数
*/
jQuery(function() {
jQuery.say("ok");
$.complex(45,{
a2:"98"
},22);
})
</script>
// jQuery.noConflict();
//此时的$就不再是jquery中的$,而是闭包中的$,而闭包中的$又是jQuery对象
(function($){
$.say = function(hello) {
alert("hello "+hello);
}
/**
* 如果有一个插件,参数很多,而且很多参数并不是必须的
* 如此在调用的时候就会非常麻烦
* $.complex("aa");
* $.complex("aa",null,null,null,null,null,null,"abc");
* $.complex("aa","abc")
*/
// $.complex = function(p1,a2,a3,a4,a5,a6,a7,a8) {
//
// }
/**
* 插件的参数的解决方法一般是通过options来定义
* options中一般使用json来定义,这个时候就可以灵活来确定参数个数
*/
$.complex = function(p1,options,p2) {
/**
* 在代码中,通过extend方法来完成覆盖
*/
var settings = $.extend({
a2:"ok",
a3:"hello",
a4:"你好"
},options||{});
alert(p1+p2);
alert(settings.a2+","+settings.a3+","+settings.a4);
}
})(jQuery)//传入jQuery作为参数