zoukankan      html  css  js  c++  java
  • jQuery1.11源码分析(6)-----jQuery结构总揽

    (在看以下内容之前请先对原型链有一定的了解,比如:prototype是对象还是函数?)

    在看jQuery的其他源码之前,必须对jQuery的数据结构有一定的了解。

    jQuery的核心很简单,jQuery工厂函数和jQuery对象,其他的都是各个功能模块工具函数。

    jQuery工厂函数主要有两个作用,生成jQuery对象和充当其他工具函数的命名空间(总不能把那些函数命名成全局函数来污染了全局变量吧)。

    但jQuery工厂函数不是简简单单地直接new jQuery()来生成jQuery对象,而是采用如下的形式。

    jQuery = function( selector, context ) {
    		// The jQuery object is actually just the init constructor 'enhanced'
    		// Need init if jQuery is called (just allow error to be thrown if not included)
    		return new jQuery.fn.init( selector, context );
    	},

    上面的代码是通过调用jQuery.fn.init来生成一个jQuery对象,此处的jQuery.fn和jQuery.prototype和jQuery.fn.init.prototype等价(后面会有赋值),所以也没什么特殊的,我暂时没看出这么写的好处。

    那么生成的jQuery对象是什么呢?其实就是一个数组,里面存放着匹配通过调用Sizzle返回的各个DOM元素,并且给这个数组添加了两个自定义属性,selector和context,即这些DOM元素匹配的选择符和上下文,你可以试试$('body div').selector和$('body div').context。

    这就是jQuery工厂函数和jQuery对象的最简形式。

    当然,jQuery工厂函数上还存放着各种工具函数,比如jQuery.extend,后续的大多数工具函数都要调用此函数来添加到jQuery工厂函数上。

    之所以说这些函数是工具函数,是因为这些函数的功能不用考虑任何jQuery对象的结构,后面还有相应的业务函数,即需要考虑jQuery对象结构来实现功能的函数。

    比如下面代码中的each就是业务函数,最终是通过调用工具函数来实现功能的

    each: function( callback, args ) {
    		return jQuery.each( this, callback, args );
    	},
    

    如何区分工具函数还是业务函数?一个简单的标准就是,看这个函数的命名空间是jQuery还是jQuery.fn,前者是工具函数,后者是业务函数

  • 相关阅读:
    Jersey(1.19.1)
    Jersey(1.19.1)
    Jersey(1.19.1)
    Jersey(1.19.1)
    Jersey(1.19.1)
    Jersey(1.19.1)
    Jersey(1.19.1)
    Jersey(1.19.1)
    17. Letter Combinations of a Phone Number
    37.Sudoku Solver
  • 原文地址:https://www.cnblogs.com/suprise/p/3660598.html
Copyright © 2011-2022 走看看