logo头像

求知若渴,虚心若愚

jQuery - jQuery源码学习 - jQuery扩展工具方法源码分析(一)

expando

  • 唯一性
  • core_version 为jQuery的版本号。
  • \D的意思是:不是数字的,就选中。
  • 因此expando就是jQuery+一段整数。
  • 数据缓存,ajax,事件机制都用到了这个。

noConflict()

  • 处理冲突,因为有些库可能会用到$甚至jQuery
  • 其他一些 JavaScript 框架包括:MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。
  • noConflict() 方法会释放会 $ 标识符的控制,这样其他脚本就可以使用它了
  • 我们可以调用jq = $.onConflict(true);这时jq就可以当做jQuery了,并且其他库可以使用jQuery的到乐标识符了
1
2
3
4
5
6
7
8
9
10
11
12
13
noConflict: function( deep ) {
// 如果window.$ === jQuery,则设置window.$为初始化时备份的_$。也就是说,只有在当前jQuery库持有全局变量$的情况下,才会释放$的控制权给前一个JavaScript库
if ( window.$ === jQuery ) {
window.$ = _$;
}
// 如果参数deep为true,并且window.jQuery === jQuery,则设置window.jQuery为初始化时备份的_jQuery。
// 如果参数deep为true,只有在当前jQuery库持有全局变量jQuery的情况下,才会释放jQuery的控制权给前一个JavaScript库。
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}

return jQuery;
},

isReady

  • DOM准备好了吗?一旦发生,就设置为真

readyWait

  • 一个计数器,用于跟踪准备好的事件发生之前等待多少项目
  • 要加载多个文件时(a.js,b.js),就要每次都++

holdReady()

  • 用于暂停或恢复.ready() 事件的执行
    • 恢复执行一次,减少一次jQuery.readyWait,直到它为0
  • 该方法必须在文档靠前部分被调用,例如,在头部加载完 jQuery 脚本之后,立刻调用该方法。如果在 ready 事件已经被调用后再调用该方法,将不会起作用。
  • 首先调用$.holdReady(true)[调用后 ready 事件将被锁定]。当准备好执行 ready 事件时,调用$.holdReady(false)。
  • 可以对 ready 事件添加多个锁定,每个锁定对应一次$.holdReady(false)[解锁]调用。
  • ready 事件将在所有的锁定都被解除,并且页面也已经准备好的情况下被触发。

ready()

  • 当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件
  • ready() 函数仅能用于当前文档,因此无需选择器
  • 三种写法
1
2
3
4
5
$(document).ready(function)

$().ready(function)

$(function)

TIP
ready() 函数不应与 body的onload=””一起使用

isFunction()

  • 判断是否是function
  • 在低版本IE浏览器下typeof alert 返回object,而不是function
  • 这个方法的实现依赖于方法jQuery.type( obj ),通过判断 jQuery.type( obj )返回值是否是 function 来实现

isArray

  • isArray = Array.isArray

  • 不兼容IE8以及以下版本

isWindow()

1
2
3
isWindow: function( obj ) {
return obj != null && obj === obj.window;
},
  • 判断是不是window

  • false == null 结果是 false

  • true == null 结果 false
  • 只有null和undefined才等于null,而只有这两个变量没有属性。其他的像字符串有包装对象,可以有属性。
  • window有两种意思:
    • 全局对象
    • 浏览器窗口。
    • 而只有window才有window属性,因此只有window才会返回true
    • window.window表示全局对象中的浏览器窗口。

isNumeric()

  • 先判断参数是否能转成数字,不可以就是NaN,那么isNaN就会返回true
  • 如果是数字,但是必须是有限数,不然也不是number类型
1
2
3
isNumeric: function( obj ) {
return !isNaN( parseFloat(obj) ) && isFinite( obj );
},
  • 先执行parseFloat( obj )尝试把参数obj解析为数字
  • 然后用isNaN()判断解析结果是否是合法数字,并用isFinite()判断参数obj是否是有限的。
  • 如果parseFloat( obj )的解析结果是合法数字,并且参数obj是有限数字,则返回true;否则返回false。
  • 方法parseFloat( string )用于对字符串参数进行解析,并返回字符串中的第一个数字。

    • 在解析过程中,如果遇到了不是有效数字的字符,解析就会停止并返回解析结果;
    • 如果字符串没有以一个有效的数字开头,则返回NaN;
    • 如果传入的参数是对象,则自动调用该对象的方法toString(),得到该对象的字符串表示,然后再执行解析过程
  • 方法isNaN( x )用于判断参数是否为非数字值,常用于检测方法parseFloat()和parseInt()的解析结果。

  • 方法isFinite( number )用于判断一个数字是否是有限的。
支付宝打赏 微信打赏

赞赏是对我们的肯定!