在jQuery.fn.init函数的内部,当jQuery(selector,context)时,如果有第二个参数context的输入,那么会有这么一个逻辑,this.constructor( context ).find( selector );也就是会所,如果有第二个参数的话,因为在jQuery.fn对象中,有这么一个属性,jQuery.fn.constructor= jQuery,所以,上式就可以变成jQuery(context).find(selector)了,所以,这样看来,第二个参数其实还不如我们直接以find方法查找,更具有优势的。
所以,这个算是为了什么,才给留的一个第二个参数呢?
扩展既然说到这里,那么也就顺便说下jQuery.extend和jQuery.fn.extend对jQuery的扩展,在使用上的不同,也就很明显了
由上一小节中的简单的代码中,可以看出jQuery是一个函数,那么使用jQuery.extend进行扩展则是把新的方法,扩展到jQuery的静态属性和方法上,在使用时,只能通过jQuery.name的方法进行调用,新方法的层级是和上一小节中的fn方法同级。
而jQuery.fn.extend方法,则是把新的方法或者属性扩展到了jQuery.fn对象上,而该对象上的对象,是可以进行链式操作的。并且通过该方法添加的属性或者方法,会立刻在jQuery的所有对象中得到体现(这句话说得不清,看下面的例子)。
在上一小节代码的基础上,添加如下的一段代码:
var a = jQuery().init(); //jQuery.init //jQuery.init jQuery.fn.toObject = function(){ console.log("jquery.toObject"); return this; } //新添加的方法,可以在a对象中使用 //这是由原型链的共享特性决定的 a.toObject().toArray(); //jquery.toObject //jquery.toArray如果对上述内容有疑问,请提出,或者请参考在第一小节中链接的三篇文章。
本文地址:?p=207