0 Comments

盘根错节的逻辑关系

发布于:2013-05-31  |   作者:广州网站建设  |   已聚集:人围观
盘根错节的逻辑关系

根据jQuery官网提供的API文档可知,jQuery()提供了以下4种构建jQuery对象的方式。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. jQuery(expression, [context])  
  2. jQuery(html, [ownerDocument])  
  3. jQuery(elements)  
  4. jQuery(callback) 

其中jQuery可以使用$简写。上述四种构建jQuery对象的方式是经常用到的。从上述参数列表可以看出,其实jQuery的参数可以是任意元素。例如:


  1. $("div > p");   //参数可以是字符串  
  2. $( $("div > p"));   //参数可以是jQuery对象或者类数组(ArrayLike)的集合  
  3. $(document);   //参数可以是DOM元素  
  4. $();        // $(document)简写  
  5. $(function(){});// $(document).ready()的简写  
  6. $([]);      // 参数可以是数组  
  7. $({});      // 参数可以是对象  
  8. $(1) ;      // 参数可以是数字,即把1 存储jQuery对象的数据集合中 

虽然说,在上面的示例中最后 4 行代码都可以被解析,但是这些参数数据是被存储到ArrayLike(类数组)集合中的,而不是被转换为DOM元素。虽然语法不错,解析正常,但是它们无法完成实际应用,所以不建议传入非DOM元素的参数。

下面我们就顺着jQuery框架的这个惟一入口,慢慢向里爬进,以窥视其中的秘密。当我们调用jQuery()方法时,它没有被实例化,也就是说jQuery类型被抛弃了,我们仅仅把它作为一个普通函数来调用,此时该方法中的this关键字指向的是Window对象,而不是jQuery对象,请读者务必注意。

不过,当调用该方法时,会返回一个jQuery.fn.init类型的实例,同时,jQuery又使用自己的原型对象覆盖了jQuery.fn.init类型的原型对象,所以就形成了一种错觉,很多初学者往往在这里栽了跟头。下面是jQuery框架中的核心代码(节选)。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. jQuery = window.jQuery = window.$ = function ( selector, context ) {  
  2.     return new jQuery.fn.init( selector, context );  
  3. }  
  4. jQueryjQuery.fn.init.prototype = jQuery.fn; 

jQuery对象不是通过new jQuery来继承其prototype中的方法的,而是通过jQuery.fn.init初始化构造器生成的。所以,为jQuery.prototype添加函数集也就失去了存在价值。虽然直接使用new jQuery()也是允许的,但是由于该函数的返回值覆盖了new jQuery()创建的实例对象,所以使用new jQuery()来构建jQuery对象也是无法存活的。

总之,jQuery对象其实就是jQuery.fn.init构造器创建的对象,而通过jQuery.fn.init. prototype = jQuery.fn;途径,再使用jQuery的原型对象去覆盖jQuery.fn的原型对象,使得jQuery对象的原型方法也就被继承过来,从而形成了错综复杂但又井然有序的关系。

标签:
飞机