往下翻页之前,有必要了解以下知识:
第一个括号里边的function($){….}实际上就是一个匿名函数,它的形参是$,这很奇怪,其实这里主要是为了不与其它的库冲突。我们在调用函数的时候,通常都是函数名后边加上括号以及实参,但是由于操作符的优先级我们定义的匿名函数也需要用()括起来,所以就有了前面的(function($){....})。
现在这句代码什么意思大家应该很清楚了:第一个括号表示定义了一个匿名函数,然后(jQuery)表示为该函数传递的参数,整个结合起来意思就是,定义了一个匿名函数,然后又调用该函数,并传递实参jquery,相当于——function fun($){…};fun(jQuery);
这种方法多用于存放开发的插件,执行其中的代码时,Dom对象并不一定加载完毕。于此相反的是$(function(){}),这种方法在使用时页面的Dom对象已经加载完毕了。事实上该方法的全写是:$(document).ready(function(){});
jQuery为开发插件提拱了两个方法,分别是:
jQuery.fn.extend(object);//为jQuery的实例对象添加方法
jQuery.extend(object);//为jQuery类本身扩展,添加新的方法或覆盖原有的方法
在jQuery中有如下源码:
[javascript] view plain copy jQuery.fn = jQuery.prototype = { init: function( selector, context ) {//.... //...... };
由此看来jQuery.fn=jQuery.prototype,然而prototype是什么呢?
在 JavaScript 中,每个函数对象都有一个默认的属性 prototype,称为函数对象的原型成员,这个属性指向一个对象,称为函数的原型对象,当我们每定义了一个函数的时候,JavaScript 就创建了一个对应的原型对象,也就是说,当我们定义一个函数的时候,实际上得到了两个对象,一个函数对象,一个原型对象。原型对象是一个特殊的对象,函数的 prototype 成员指向它的原型对象,可以通过函数对象的 prototype 成员取得这个原型对象的引用。 所以fn表示的就是原型对象,而extend表示扩展,所以$.fn.extend表示的是为原型对象扩展方法,使用此方式扩展的方法只能用对象去调用,example: [javascript] view plain copy $.fn.extend({ test:function(){ alert("test"); } }); $("#id").test();
此方式则表示为jQuery类添加类方法(虽然jQuery没有类的概念,但用类来理解似乎简单了不少),或者直接理解为添加静态方法,然后就可以直接用$在其他地方来调用此扩展方法了,example:
[javascript] view plain copy $.extend({ test:function(param){ alert(param); } }); $.test(1);//则直接弹出1
这两个概念也是有必要知道的,详见我转载的文章:点击这里