在jQuery插件中,常常看见这样的结构,开始自己也是不理解后来通过查阅资料,慢慢的理解其中的大意,所以先总结出来。

(function( $, window, document, undefined ){}){
 
      //...code
 
}(jquery,window,document)

1.立即执行函数:(function(){})()

这是一个自调函数,函数定义好之后自动执行。(function(){})表示一个匿名函数,而后面紧跟着的()表示立即调用此函数。而且()也是向函数传递参数的地方。

比如:

;(function(){
     alert("立即执行");
})();
 
(function(parameter){
    alert(parameter);
})("立即执行函数传递参数");

使用此函数的好处是,不会产生任何全局变量。缺点是无法重复执行。对于插件来说,是最合适不过的了。不会产生任何全局变量,同时一次引用就够了。

2.传递参数(jQuery,window,document)

$ 实参:$是jQuery的缩写,很多方法和类库也都使用$,这里表示接受jQuery对象,避免冲突

window,document实参:分别接受 window document对象。window,document 对象都是全局环境下的,而在函数体内的window document对象是局部的,这样做有个好处就是,提高性能,减少作用域链的查询时间。如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。当然如果你的插件用不到这两个对象,那么就不用传递这两个参数了。

3.ndefined形参:看起来是有点多余。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined

4.“;”分号作用:

防止多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并后的语法错误。

5.$.fn的用法

举个例子:
 
<div id="myDiv"></div>
 
(function( $, window, document, undefined ){}){
    $.fn.extend({
        test:function(){
                alert($(this).attr("id"));
        }
    });
   
}(jquery,window,document)
 
$("#myDiv").test();
 
//结果:myDiv
 
 
(function( $, window, document, undefined ){}){
    $.extend({
        test:function(){
                alert("好好活着");
        }
    });
   
}(jquery,window,document)
 
$('#myDiv').test();
 
//结果:好好活着

前者是绑定在dom元素上面的插件,后者是绑定在jQuery上的插件

$.fn是指jQuery的命名空间,加上fn的方法及属性,会对jQuery实例有效。

如扩展$.fn.abc(),即$.fn.abc()是对jQuery扩展了一个abc()方法,在每一个jquery实例都可以引用这个方法,例如

$(“#div”).abc();

jQuery为开发者开发插件提供了两个方法,分别是:

jquery.extend(object);为扩展jquery类本身.为类添加新的方法

jquery.fn.extend(object);给jquery对象添加方法

fn原型:查看jquery可知

jQuery.fn = jQuery.prototype ={ 
   init: function( selector, context ){//....  
   //...... 
};

jquery.fn = jquery.prototype 

jquery本身就是一个封装得很好的类,比如我们用语句 $(“div”)会生成一个jquery类的实例。

jquery.extend(object);为jquery类添加类方法,可以理解为添加静态方法。

如:

$.extend({
    add:function(a,b){
        return a+b;
    }
});
 
 
$("#div").add(3,4);//return 7

这样便为jquery添加一个为add 的方法,之后便可以在引入jquery的地方,使用这个方法了;

$.fn.extend(object);对jquery添加成员函数、jquery类的实例 可以使用这个成员函数。

列如 编辑被点击时,弹出当前编辑框里面的内容。

$.fn.extend({
    alertWhileClick:function(){
        $(this).click(function(){
            alert($(this).val());
        });        
    }
});

原文链接:https://blog.csdn.net/zhengbusi/article/details/81207442

 

另一篇整理比较好的文章:

学习jQuery这一篇就够了

https://caochenlei.blog.csdn.net/article/details/109683256

作者还有好多学习。。这一篇就够了文章

 

 

 

 

 

 

 

 

 

版权声明:本文为djd66原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/djd66/p/16898713.html