jQuery 通过extend将方法 扩展到jQuery 函数上

jQuery.extend({expando: 生成唯一的jQuery字符串 (jQuery 内部使用)noConflict: 防止冲突函数,//后面四个都与DOM加载有关isReady: DOM是否加载完(内),readyWait: 等待多少文件的计数器(内),holdReady: 推迟DOM触发,ready: 准备DOM触发,...})

expando() 属性:

因为生成的字符串具有唯一性,后续的 数据缓存、事件操作、ajax 都用到了它。

jQuery.extend({expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),...
})

noConflict() 方法: 这里 有介绍。

下面介绍jQuery的DOM加载相关:

window.onload 和 $(function(){ ...}) 的区别在于:

前者是等页面元素都加载完,后者是只等DOM节点加载完(加载速度高于前者,jQuery中利用了js原生方法 DOMContentLoaded 实现)。

jQuery中调用原理见下图:

由上图看出:接下来只分析 jQuery.ready.promise().done( fn )就可以了。

由jQuery.ready.promise().done( fn ),可猜想 jQuery.ready.promise() 返回的是deferred延迟对象,后面才能直接跟 .done() 。(查看 deferre对象介绍

jQuery.ready.promise() 相关源码:

...
var readyList;
...
completed = function() {document.removeEventListener( "DOMContentLoaded", completed, false );window.removeEventListener( "load", completed, false );jQuery.ready();};
...
jQuery.ready.promise = function( obj ) {if ( !readyList ) {readyList = jQuery.Deferred();  if ( document.readyState === "complete" ) {setTimeout( jQuery.ready );} else {document.addEventListener( "DOMContentLoaded", completed, false );window.addEventListener( "load", completed, false );}}return readyList.promise( obj );
};

由上面代码可以看出:

1、jQuery.ready.promise()中创建了延迟对象readyList,最后返回的是readyList.promise() (不允许外部修改状态的延迟对象);

2、不管走if还是else中的completed方法,最终调用的都是$.ready() 方法。

$.ready()相关源码:

...isReady: false,readyWait: 1,holdReady: function( hold ) {if ( hold ) { //readyWait就是一个计数器,表示还有多少个条目就绪后事件才能执行jQuery.readyWait++; } else { jQuery.ready( true );} },ready: function( wait ) { // 如果还有等待的事件的话就取消执行,直接返回 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {return;}jQuery.isReady = true;// 如果正常的ready事件触发, 减少等待的数目,然后继续等待 if ( wait !== true && --jQuery.readyWait > 0 ) {return; }readyList.resolveWith( document, [ jQuery ] ); if ( jQuery.fn.trigger ) { jQuery( document ).trigger("ready").off("ready"); }},...

转载于:https://www.cnblogs.com/hdchangchang/p/3965316.html

jQuery源码学习之六 (jQUery中扩展方法)相关推荐

  1. jquery源码学习笔记三:jQuery工厂剖析

    jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...

  2. jQuery源码学习之Callbacks

    jQuery源码学习之Callbacks jQuery的ajax.deferred通过回调实现异步,其实现核心是Callbacks. 使用方法 使用首先要先新建一个实例对象.创建时可以传入参数flag ...

  3. jQuery源码学习(1)——addClass

    最近比较闲,寻思着学习下jQuery源码,看了好多博客,很多都讲的比较详细.jQuery虽然只有那么200多K,但内容却比较丰富,对于我这样一个js菜鸟,看起来相当吃力.骨头太大,只能化整为零,从简单 ...

  4. jquery源码学习笔记一:总体结构

    练武不练功,到老一场空.计算机也一样. 计算机的功,就是原理.如果程序员只会使用各种函数,各种框架,而不知其原理,顶多熟练工人而已.知其然,更要知其所以然. jquery我们用得很爽,但它究竟咋实现的 ...

  5. jQuery源码学习第二天--jQuery的extend扩展

    Jquery中的extend扩展 一.看下常见的extend扩展: 1: jQuery.extend({ 2: noConflict: function( deep ) { 3: if ( windo ...

  6. jQuery源码学习

    $.jQuery是什么? 平时天天在用的$到底是个什么东西?$("id")思考,感觉像个工厂方法.提供selector创建jquery对象. 一看源码绕晕了,剥茧抽丝吧 定义jqu ...

  7. jQuery源码学习(6)-Sizzle选择器(2)

    1.CSS选择器的位置关系: 四种关系:"+" 紧挨着的兄弟关系:">" 父子关系:" " 祖先关系:"~" 之后 ...

  8. jQuery源码学习(5)-Sizzle选择器(1)

    1.常见的选择器: #test表示id为test的DOM节点 .aaron 表示class为aaron的DOM节点 nav>li 表示在nav内部子li的样式,而不是所有的后代元素,只是往下一层 ...

  9. jquery源码解析:jQuery数据缓存机制详解2

    上一课主要讲了jQuery中的缓存机制Data构造方法的源码解析,这一课主要讲jQuery是如何利用Data对象实现有关缓存机制的静态方法和实例方法的.我们接下来,来看这几个静态方法和实例方法的源码解 ...

  10. XLua源码学习:Lua中调用CS

    在使用lua代码开发的过程中,一个非常重要的部分是对C#代码的调用,接下来就结合源码分析理解它的实现: 在lua中,使用诸如以下代码便可以调用C#的代码: CS.UnityEngine.Debug.L ...

最新文章

  1. Eureka 注册中心/服务发现框架
  2. 【前端】JSON.stringfy 和 JSON.parse(待续)
  3. kill Signal
  4. 手机能上网,电脑联不上网
  5. leetcode 64. 最小路径和
  6. php+MySql注入非暴力爆字段名
  7. How to custom RedHat DVD
  8. 安装第三方插件BeautifulSoup
  9. mac 安装memcached服务
  10. 【超参数寻优】遗传算法(GA) 超参数寻优的python实现
  11. 《开学第一课》观后感—吕中琪
  12. 安卓开发 给控件左边右边下边添加阴影_使用鸿蒙开发一款TV版的小游戏
  13. “超详细” 山特UPS C3KR 的驱动安装教程
  14. Python下载拼接地图
  15. c++编译提示:系统找不到指定路径
  16. java 如何打印自己快捷键_怎么快捷键取消正在执行的打印操作?
  17. day12摇色子游戏--笔记
  18. 有关rand(),srand()产生随机数学习总结
  19. 元器件 - TVS二极管
  20. HCIA-Big Data华为认证大数据工程师在线课程笔记

热门文章

  1. pytorch自动求导数机制
  2. bytes的json解析
  3. 分享一个好的数据集资源目录
  4. python用tesseract-ocr做图像识别
  5. C++string类常用函数 c++中的string常用函数用法总结
  6. prthon序列、映射
  7. c# mysql存储过程 输出参数值_C#获取存储过程返回值和输出参数值的方法
  8. 《元宇宙的未来猜想和投资机遇分析 》
  9. kubernetes视频教程笔记 (31)-安全-鉴权Authorization
  10. Docker教程小白实操入门(19)--如何通过inspect指令查看数据卷的信息