上次粗略说了jQuery的整体结构,这次挑一些静态方法先说一下吧

一、noConflict函数

这个函数是个比较有意思的函数,基本上很少用到,之所以说他是因为这个函数在最下面,太显眼了,先把他解决掉。

noConflict函数是jQuery用来解决$符号和jQuery版本冲突的。如下:

 var

     // Map over jQuery in case of overwrite
_jQuery = window.jQuery, // Map over the $ in case of overwrite
_$ = window.$; jQuery.noConflict = function( deep ) {
if ( window.$ === jQuery ) {
window.$ = _$;
} if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
} return jQuery;
};

可以看出jQuery团队考虑了很多,在初始化的时候就提前讲全局变量中的jQuery和$保存了起来,然后如果后期在调用了这个函数之后就可以将$符号的使用权让出来,甚至如果你传入了一个为true的值之后还可以将jQuery这个关键字来让出来。转让$的使用权是因为老美偏爱这个符号,很多成熟的框架都在使用了这个符号如果共同使用可能会产生冲突。而转让jQuery权限是为了防止版本冲突,例如你之前使用了低版本的jQuery,但是又想在项目中使用高版本的jQuery方法,那么你可以使用newJQuery = jQuery.noConflict( true ); 来实现,后续使用高版本的jQuery库只需要newJQuery.function()即可。

二、函数体内的扩展方法和字段

jQuery函数体内在开始定义了一下方法的别名,这个好处一个就是后续使用这些方法不需要再使用一大长串字符来使用这个方法了,只需要使用简短的别名就可以。后面的源码中大量使用了这些别名,下面先从jQuery定义的一些扩展方法开始说明。

先来看expando属性,这个属性是jQuery中的唯一值,使用jQuery+版本号+随机字符串,然后把后面部分的所有非数字全都去掉,也就是这个字段会变成一个jQuery+一长串数字。这个唯一字段跟数据缓存和事件机制都有关系。

然后isReady是否jQuery加载好,error这个是抛出错误信息,noop是定义一个空函数,比如当插件提供了一个可选的回调函数接口,那么如果调用的时候没有传递这个回调函数,就用$.noop来代替执行,这几个没什么好说的。

isFunction这个函数,这个函数其实本身没什么好说的,但是它里面用到了一个有意思的函数type,这个type是jQuery自定义的一个函数,用来区分数据类型的,类似于typeof,但是比typeof强大好用的多,不用再担心typeof null会给你一个object这种尴尬的事情了。

提到js中判断数据类型的方法,用的最多的就是typeof和instanceof,但是常规的这种方法都有其局现性,无法做到精确判断所有的数据类型,其实最精确的数据判断方法是使用:

Object.prototype.toString.call(String) ==> [object String]

这种方法,但是这种方法本身很繁琐,而且给出的结果也是一大串,于是jQuery扩展了这个方法,$.type方法中一开始判断传参是否==null,这个地方是用来判断obj是否是null或者undefined类型,所有数据类型中只有null和undefined是能够==的,因此如果是这两种类型的话就可以直接返回这个类型的字符串。

type函数后面判断obj如果不是object类型或者function类型的话就直接返回typeof的值,如果是的话会返回一个class2type[toString.call(obj)],这个前面说过了,预先定义了一个class2typt的对象,jQuery的extend函数后面有一个这个

这个是将所有的用typeof判断不了的类型预先定义出来,然后根据Object.prototype.toString.call()来判断准确的数据类型,然后将这些字段作为参数名给class2type赋值小写的名称,所以$.type不管是任何数据类型都能够准确的返回该类型小写的值。

isWindow是判断参数是否是一个浏览器窗口,只有window对象才有window属性。

isNumeric: function( obj ) {
var type = jQuery.type( obj );
return ( type === "number" || type === "string" ) &&
!isNaN( obj - parseFloat( obj ) );
},

isNumeric函数是来判断参数是否为数字类型的,这里用到了前面说的type()方法,你可能会疑问,既然type方法这么好用为什么还要多此一举的弄个这个方法呢?因为jQuery想将数字判断做的更加完善,type()方法只能判断123这种纯数字的类型,类似"123"这种字符串的数字就会返回string类型,jQuery用了这种方法就可以将字符串数字也判断出来。parseFloat函数可以将obj解析成浮点型数字或者NaN,然后判断计算结果是否为NaN,通过这种结合巧妙地将问题解决了。

isEmptyObject: function( obj ) {
var name;
for ( name in obj ) {
return false;
}
return true;
},

isEmptyObject就是判断传参是否为空对象,只要有可枚举的属性值就判断为非空,返回false。

2、jQuery的一些静态方法的更多相关文章

  1. jQuery的一些静态方法

    // 该方法被绑定在jQuery对象上,只能通过$.noConflict()调用 noConflict: function( deep ) { // 取消$在window上的绑定,方法是将_$绑定到w ...

  2. jQuery对象合并、jQuery添加静态方法、jQuery添加DOM实例方法

    实例效果: 代码演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  3. jQuery的核心对象、原型对象、静态方法、动态方法

    什么叫jQuery的核心对象? $ $===jQuery 什么叫jQuery的原型对象? $.fn $.fn===$.prototype 什么叫静态方法? 在构造函树上定义的方法,静态方法通过构造函数 ...

  4. JQuery插件定义

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...

  5. jQuery 3.0的buildFragment

    在 jQuery3.0中,buildFragment 是一个私有函数,用来构建一个包含子节点 fragment 对象.这个 fragment 在 DOM1 中就已经有了,所有浏览器都支持.当频繁操作( ...

  6. jQuery插件入门

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写("#"),("#"),("."),写了几年就对别人说非常熟悉JQ ...

  7. jQuery源代码学习之九—jQuery事件模块

    jQuery事件系统并没有将事件坚挺函数直接绑定在DOM元素上,而是基于事件缓存模块来管理监听函数的. 二.jQuery事件模块的代码结构 //定义了一些正则 // // //jQuery事件对象 j ...

  8. (转载)jQuery 1.6 源码学习(二)——core.js[2]之extend&ready方法

    上次分析了extend方法的实现,而紧接着extend方法后面调用了jQuery.extend()方法(core.js 359行),今天来看看究竟core.js里为jQuery对象扩展了哪些静态方法. ...

  9. (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构

    在网上下了一个jQuery 1.2.6的源码分析教程,看得似懂非懂,于是还是去github上下载源码,然后慢慢看源代码学习,首先来说说core.js这个核心文件吧. jQuery整体的基本架构说起来也 ...

随机推荐

  1. [小程序开发] 微信小程序audio音频播放组件+api_wx.createAudioContext

    引言: audio是微信小程序中的音频组件,可以轻松实现小程序中播放/停止音频等自定义动作. 附上微信小程序audio组件的相关属性说明:https://mp.weixin.qq.com/debug/ ...

  2. VirtualBox - RTR3InitEx failed with rc=-1912 (rc=-1912)

    有一天重启电脑后虚拟机virtual box突然打不开了,提示类似 https://askubuntu.com/questions/900794/virtualbox-rtr3initex-faile ...

  3. NYOJ 题目77 开灯问题(简单模拟)

    开灯问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:1           描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 ...

  4. 【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结

    本文将整理 java.util.Arrays 工具类比较常用的方法:  本文介绍的方法基于JDK 1.7 之上.  1.  asList方法 @SafeVarargs public static &l ...

  5. Codeforces Round #411 (Div. 2)(A,B,C,D 四水题)

    A. Fake NP time limit per test:1 second memory limit per test:256 megabytes input:standard input out ...

  6. sql server 2008 r2 数据库操作时提示 9002错误“事物日志已满”问题

    事务日志截断 若要避免数据库的事务日志被填满,例行备份至关重要.在简单恢复模式下,备份了数据库后会自动截断日志,而在完整恢复模式下,只有备份了事务日志后方才截断日志.但是,截断过程有时也可能发生延迟. ...

  7. c++(排序二叉树插入)

    二叉树的节点插入比较简单.一般来说,二叉树的插入主要分为以下两个步骤: 1) 对当前的参数进行判断,因为需要考虑到头结点,所以我们使用了指针的指针作为函数的输入参数 2) 分情况讨论: 如果原来二叉树 ...

  8. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  9. python基础1 day2

    一.上节课回顾1. 编译型: 将源码一次性全部编译成二进制. C 优点:执行效率高. 缺点:开发效率慢,不可跨平台使用. 解释型: 当程序执行时,代码一行一行的去解释成二进制. python 优点:开 ...

  10. 【干货】平安打卡神器E行销刷脸考勤破解,是怎么做到的?

    很多人好奇平安E行销打卡到底是怎么破解的,为什么明明需要连接公司职场WiFi才可以参会,才可以刷脸打卡.为什么不用去公司,在家里,或者外面只要有4G或WiFi的地方都可以.今天我就来给大家解密.把原理 ...