jQuery源码学习之六 (jQUery中扩展方法)
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中扩展方法)相关推荐
- jquery源码学习笔记三:jQuery工厂剖析
jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...
- jQuery源码学习之Callbacks
jQuery源码学习之Callbacks jQuery的ajax.deferred通过回调实现异步,其实现核心是Callbacks. 使用方法 使用首先要先新建一个实例对象.创建时可以传入参数flag ...
- jQuery源码学习(1)——addClass
最近比较闲,寻思着学习下jQuery源码,看了好多博客,很多都讲的比较详细.jQuery虽然只有那么200多K,但内容却比较丰富,对于我这样一个js菜鸟,看起来相当吃力.骨头太大,只能化整为零,从简单 ...
- jquery源码学习笔记一:总体结构
练武不练功,到老一场空.计算机也一样. 计算机的功,就是原理.如果程序员只会使用各种函数,各种框架,而不知其原理,顶多熟练工人而已.知其然,更要知其所以然. jquery我们用得很爽,但它究竟咋实现的 ...
- jQuery源码学习第二天--jQuery的extend扩展
Jquery中的extend扩展 一.看下常见的extend扩展: 1: jQuery.extend({ 2: noConflict: function( deep ) { 3: if ( windo ...
- jQuery源码学习
$.jQuery是什么? 平时天天在用的$到底是个什么东西?$("id")思考,感觉像个工厂方法.提供selector创建jquery对象. 一看源码绕晕了,剥茧抽丝吧 定义jqu ...
- jQuery源码学习(6)-Sizzle选择器(2)
1.CSS选择器的位置关系: 四种关系:"+" 紧挨着的兄弟关系:">" 父子关系:" " 祖先关系:"~" 之后 ...
- jQuery源码学习(5)-Sizzle选择器(1)
1.常见的选择器: #test表示id为test的DOM节点 .aaron 表示class为aaron的DOM节点 nav>li 表示在nav内部子li的样式,而不是所有的后代元素,只是往下一层 ...
- jquery源码解析:jQuery数据缓存机制详解2
上一课主要讲了jQuery中的缓存机制Data构造方法的源码解析,这一课主要讲jQuery是如何利用Data对象实现有关缓存机制的静态方法和实例方法的.我们接下来,来看这几个静态方法和实例方法的源码解 ...
- XLua源码学习:Lua中调用CS
在使用lua代码开发的过程中,一个非常重要的部分是对C#代码的调用,接下来就结合源码分析理解它的实现: 在lua中,使用诸如以下代码便可以调用C#的代码: CS.UnityEngine.Debug.L ...
最新文章
- Eureka 注册中心/服务发现框架
- 【前端】JSON.stringfy 和 JSON.parse(待续)
- kill Signal
- 手机能上网,电脑联不上网
- leetcode 64. 最小路径和
- php+MySql注入非暴力爆字段名
- How to custom RedHat DVD
- 安装第三方插件BeautifulSoup
- mac 安装memcached服务
- 【超参数寻优】遗传算法(GA) 超参数寻优的python实现
- 《开学第一课》观后感—吕中琪
- 安卓开发 给控件左边右边下边添加阴影_使用鸿蒙开发一款TV版的小游戏
- “超详细” 山特UPS C3KR 的驱动安装教程
- Python下载拼接地图
- c++编译提示:系统找不到指定路径
- java 如何打印自己快捷键_怎么快捷键取消正在执行的打印操作?
- day12摇色子游戏--笔记
- 有关rand(),srand()产生随机数学习总结
- 元器件 - TVS二极管
- HCIA-Big Data华为认证大数据工程师在线课程笔记