最近下载了一个jQuery编写的纸牌游戏来学习,收获很大,可以说是颠覆了我对jQuery的一些看法。
首当其冲的就是jQuery中的几种不同语句写法的对比,在网上搜索一番之后,转载如下:
jQuery(function() {...}) vs. (function() {...})(jQuery)
原文地址:http://eason26-li.iteye.com/blog/520188
一、先看
jQuery(function(){
});
全写为
jQuery(document).ready(function(){
});
意义为在DOM加载完毕后执行了ready()方法。
二、再看
(function(){
})(jQuery);
其实际上是执行()(para)匿名方法,只不过是传递了jQuery对象。
三、总结
jQuery(function(){ });用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在。不可用于存放开发插件的代码,因为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中的方法(函数)。
(function(){ })(jQuery);用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码请小心使用。
$.extend vs. $.fn.extend
上一篇分析了jQuery对象的组成,这篇分析下它的extend方法。如下
1
2
3
|
jQuery.extend function () ... }; |
我们可以用$.extend去扩展自定义的对象,如
1
2
3
|
var
$.extend(myself, function (n){ this .name=n;} myself.setName( "tom" ); |
通过$.extend为对象myself添加了setName方法。但这里主要讨论$.extend如何构建jQuery库的。不知注意到上面代码中jQuery.extend和jQuery.fn.extend是同一个函数。我们浏览下jQuery库,发现有些方法是通过调用jQuery.extend扩展的,有些则是通过调用jQuery.fn.extend扩展的。
下面分别讨论:
1,通过jQuery.extend扩展
我们知道jQuery.extend中的jQuery类型是function,即typeof jQuery值为字符串“function”。如果把jQuery当成一个类,jQuery.extend相当于为该类添加了静态方法extend。静态方法是不需要new一个实例再去调用的,通过“类名+方法名”直接调用。即jQuery.extend(...),jQuery又被赋值给$。因此我们更习惯$.extend(...)。
源码中直接调用jQuery.extend方法,只传一个参数。如下
1
2
3
4
|