(在看以下内容之前请先对原型链有一定的了解,比如: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,前者是工具函数,后者是业务函数

jQuery1.11源码分析(6)-----jQuery结构总揽的更多相关文章

  1. jQuery1.11源码分析(7)-----jQuery一些基本的API

    这篇文章比较繁杂,主要就是把jQuery源码从上到下列出来,看我的注释就好了. jQuery源码对各种加载器做了处理. //阅读这个源码是请先了解一下概念,即时函数,工厂模式 (function( g ...

  2. jQuery1.11源码分析(8)-----jQuery调用Sizzle引擎的相关API

    之所以把这部分放在这里,是因为这里用到了一些基本API,前一篇介绍过后才能使用. //jQuery通过find方法调用Sizzle引擎 //jQuery通过find方法调用Sizzle引擎 jQuer ...

  3. jQuery1.11源码分析(1)-----Sizzle源码概览[原创]

    最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的. 本文面向的阅读对象:正在学习 ...

  4. jQuery1.11源码分析(5)-----Sizzle编译和过滤阶段[原创]

    在上一章中,我们说到在之前的查找阶段我们已经获得了待选集seed,那么这一章我们就来讲如何将seed待选集过滤,以获得我们最终要用的元素. 其实思路本质上还是不停地根据token过滤,但compile ...

  5. jQuery1.11源码分析(2)-----Sizzle源码中的正则表达式[原创]

    看完了上篇,对Sizzle有了一个大致的了解,我们接下来就可以正式开始啃Sizzle的源码了.上来就讲matcher难度太大,先来点开胃菜,讲讲Sizzle中的各个正则表达式的作用吧(本来还想讲初始化 ...

  6. jQuery1.11源码分析(9)-----初始化jQuery对象的函数和关联节点获取函数

    这篇也没什么好说的,初始化jQuery对象的函数要处理多种情况,已经被寒冬吐槽烂了.关联节点获取函数主要基于两个工具函数dir和sibling,前者基于指定的方向遍历,后者则遍历兄弟节点(真的不能合并 ...

  7. jQuery1.11源码分析(3)-----Sizzle源码中的浏览器兼容性检测和处理[原创]

    上一章讲了正则表达式,这一章继续我们的前菜,浏览器兼容性处理. 先介绍一个简单的沙盒测试函数. /** * Support testing using an element * @param {Fun ...

  8. jQuery1.11源码分析(10)-----Callbacks模块

    Callbacks模块实质上就是一个回调函数队列(当然吹得很牛逼..比如“提供了一种强大的方法来管理回调函数队列”),之所以介绍它是因为后面的Derferred模块基于它. Callbacks生成时接 ...

  9. jQuery1.11源码分析(4)-----Sizzle工厂函数[原创]

    在用前两篇讲述完正则表达式.初始化.特性检测之后,终于到了我们的正餐——Sizzle工厂函数! Sizzle工厂函数有四个参数, selector:选择符 context:查找上下文 results: ...

随机推荐

  1. 【面试必备】Swift 面试题及其答案

    初级 问题1- Swift 1.0 or later 什么是optional类型,它是用来解决什么问题的? 答案:optional类型被用来表示任何类型的变量都可以表示缺少值.在Objective-C ...

  2. 初次使用C#中的yield

    这几天在Python程序员的微信订阅号中总是见到yield的关键字,才想起来在C#中也是有yield,但是只是知道有,从来没有了解过他的用法,今天有时间就来看看是怎么使用的.刚开始肯定就是搜索一下用法 ...

  3. 浅入DNS

    1.DNS是怎么工作的 首先我们可以很简单的理解DNS协议,它就是一个将域名与ip地址进行双向转换的协议,而消息类型只有查询和回应2种类型.那客户端查询域名,是要请求谁呢?答案是域名服务器,现在域名服 ...

  4. [USACO2005][POJ3045]Cow Acrobats(贪心)

    题目:http://poj.org/problem?id=3045 题意:每个牛都有一个wi和si,试将他们排序,每头牛的风险值等于前面所有牛的wj(j<i)之和-si,求风险值最大的牛的最小风 ...

  5. Bootstrap3.0学习第十一轮(输入框组)

    详情请查看http://aehyok.com/Blog/Detail/17.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  6. Jquery-EasyUI学习~

    为了回顾,简单记录下EasyUI如何使用: 先来张效果图: 这张图是从后台获取数据,然后进行展示的. 我这里利用的是EF-MVC. 先说下View视图里面的HTML代码是如何写的: @{ ViewBa ...

  7. 北京大学信息科学技术学院计算机专业课程大纲选摘--JAVA

  8. oracle 的安装脚本

    ==[root@oracle ~]# cat 1.preusers.sh ==#!/bin/bash#Purpose:Create 3 groups named 'oinstall','dba','o ...

  9. Jquery-获取子元素children,find

    1.查找子元素方式1:> 例如:var aNods = $("ul > a");查找ul下的所有a标签 2.查找子元素方式2:children() 3.查找子元素方式3 ...

  10. 【POJ 1273】Drainage Ditches(网络流)

    一直不明白为什么我的耗时几百毫秒,明明差不多的程序啊,我改来改去还是几百毫秒....一个小时后:明白了,原来把最大值0x3f(77)取0x3f3f3f3f就把时间缩短为16ms了.可是为什么原来那样没 ...