2、jQuery的一些静态方法
上次粗略说了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的一些静态方法的更多相关文章
- jQuery的一些静态方法
// 该方法被绑定在jQuery对象上,只能通过$.noConflict()调用 noConflict: function( deep ) { // 取消$在window上的绑定,方法是将_$绑定到w ...
- jQuery对象合并、jQuery添加静态方法、jQuery添加DOM实例方法
实例效果: 代码演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- jQuery的核心对象、原型对象、静态方法、动态方法
什么叫jQuery的核心对象? $ $===jQuery 什么叫jQuery的原型对象? $.fn $.fn===$.prototype 什么叫静态方法? 在构造函树上定义的方法,静态方法通过构造函数 ...
- JQuery插件定义
一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...
- jQuery 3.0的buildFragment
在 jQuery3.0中,buildFragment 是一个私有函数,用来构建一个包含子节点 fragment 对象.这个 fragment 在 DOM1 中就已经有了,所有浏览器都支持.当频繁操作( ...
- jQuery插件入门
一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写("#"),("#"),("."),写了几年就对别人说非常熟悉JQ ...
- jQuery源代码学习之九—jQuery事件模块
jQuery事件系统并没有将事件坚挺函数直接绑定在DOM元素上,而是基于事件缓存模块来管理监听函数的. 二.jQuery事件模块的代码结构 //定义了一些正则 // // //jQuery事件对象 j ...
- (转载)jQuery 1.6 源码学习(二)——core.js[2]之extend&ready方法
上次分析了extend方法的实现,而紧接着extend方法后面调用了jQuery.extend()方法(core.js 359行),今天来看看究竟core.js里为jQuery对象扩展了哪些静态方法. ...
- (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构
在网上下了一个jQuery 1.2.6的源码分析教程,看得似懂非懂,于是还是去github上下载源码,然后慢慢看源代码学习,首先来说说core.js这个核心文件吧. jQuery整体的基本架构说起来也 ...
随机推荐
- 集合 (set) 的增删改查及 copy()方法
一.集合 1.集合的创建 set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,type(set1)) print(set2,type(s ...
- div 初始高度,并随内容高度变化
前几天做个邮箱系统,其中在内容的div设置了高度为200px; 可是在内容大于200高度后就出现了内容的溢出. 如图: 查完资料够才知道css有个min-height; 设置div的初始化高度,设置属 ...
- [bzoj1774] [Usaco2009 Dec]Toll 过路费
Floyd神用法...设dis[i][j]表示i点到j点的最短路(只算边权),map[i][j]表示i到j最小费用 将n个点先按照点权排一下序...这样就可以比较方便的求出路径上最大点权了... 因为 ...
- HDU4355-Party All the Time-三分
Party All the Time Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 命运(经典dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 命运 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- PHPStorm+PHPStudy配置XDebug
img { max-width: 100% } 上一节里面从PHPStudy+PHPStorm的配置,到最后发布,PHPStorm只是承担了编辑器和发布站点的任务,但是还没有办法像Visual Stu ...
- [国嵌攻略][071][Coredump故障分析]
Core Dump定义 Core Dump又叫核心转存.当程序在运行过程中发生异常,Linux系统可以把程序出错时的内存内容存储在一个core文件中,这个过程叫Core Dump. Core Dump ...
- JVM GC杂谈之理论入门
GC杂谈之理论入门 JVM堆布局介绍 JVM堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三个区域:Eden.From Sur ...
- 将js进行到底:node学习笔记1
废话:自高中以来一直对编程充满激情,磨剑五年,如今要毕业了,我不想用我已经擅长的知识敷衍,而想以一个全新的领域去面向我的毕设--是时候学习一下node.js node.js基础 对于JavaScrip ...
- Guake!
快捷键及其定制: [全局快捷键] F12:显示/隐藏Guake的程序界面. [局部快捷键] Ctrl+Shift+T:新建标签页: Ctrl+Shift+W:关闭标签页: Ctrl+Shift+C:复 ...