上次粗略说了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. ------- 当前全球最新的 IPv4 地址池使用报告 -------

    -------------------------------------------------------------- 对于互联网行业相关的从业人员而言,时刻关注 IPv4 地址池的状态此类&q ...

  2. Maven适配多种运行环境的打包方案

    项目从开发到部署会历经多个运行环境,如开发环境.测试环境和生产环境,不同环境中项目的配置文件通常也会不同,典型的如数据库连接配置.我们当然不希望每次部署打包前都去修改配置文件以适配环境,利用Maven ...

  3. python写外网收集信息器

    简单化,知道IP去扫描ip import socket from socket import * a=input('请输入域名:') try: ip=gethostbyname(a) print('[ ...

  4. Codeforces Round #449 (Div. 2)-897A.Scarborough Fair(字符替换水题) 897B.Chtholly's request(处理前一半) 897C.Nephren gives a riddle(递归)

    A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. Is It A Tree?(并查集)(dfs也可以解决)

    Is It A Tree? Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submi ...

  6. javaScript事件流是什么?

    一.事件 事件是文档或者浏览器窗口中发生的,特定的交互瞬间. 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字. 事件是javaScript和DOM之间交 ...

  7. node中定时器, process.nextTick(), setImediate()的区别与联系

    1.定时器 setTimeout()和setInterval()与浏览器中的API是一致的,定时器的问题在于,他并非精确的(在容忍范围内).尽管事件循环十分快,但是如果某一次循环占用的时间较多,那么下 ...

  8. Personal Learning Path of Java——Java语言基础

    Java语言是面向对象编程语言,Java程序的基本组成单元是类,类体中又包括属性和方法两部分.每一个程序都必须包含一个main()方法,含有main()方法的类称为主类. 如下面代码: package ...

  9. 从零开始学习前端JAVASCRIPT — 1、JavaScript基础

    1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...

  10. 从零开始学习前端开发 — 1、HTML基础

    一.web标准 web标准-网页制作的标准,它是由一系列标准组成的,主要包含三个方面:结构(html,xhtml),表现(css),行为(javascript) 注:结构和表现的标准由w3c(万维网联 ...