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整体的基本架构说起来也 ...
随机推荐
- 【C#系列】浅谈委托和委托
本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!! 本篇文章主要采用理论和代码实例相结合方法来论述委托和事件,涉及到一些边界技术,如软件架构的OCP原则(开-闭原则), 软件架 ...
- 记录因webpack版本问题导致vue-cli快速搭建的项目运行时报错!
今日突然在群里见到好几个小伙伴说在创建vue项目后不能跑,会报错. 刚开始还不信,花了几分钟时间自己试了下,还真报错了!如下图 小伙伴的报错,如下图! 百思不得其解,看了运行的日志也找不出原因.于 ...
- Codeforces Round #328 (Div. 2)_B. The Monster and the Squirrel
B. The Monster and the Squirrel time limit per test 1 second memory limit per test 256 megabytes inp ...
- Spider_Man_5.1 の Mongodb_安装
先安装: 环境Mac OS X 我是直接用brew来安装的,感觉这个包管理工具,很省心. 安装Homebrew:ruby -e "$(curl -fsSL https://raw.githu ...
- Java入门篇(五)——Java的字符串/String类
前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...
- 浅谈localStorage、sessionStorage 与cookie
由于工作的需要,今天使用了下localStorage.sessionStorage和cookie,感觉这玩意儿还挺好用的. 关于localStorage与sessionStorage的知识点以及用法之 ...
- 编写自己的JavaScript方法库
下面列出了我在项目中经常使用到的一些方法,这些方法可以很方便的提高我们的工作效率,代码在GitHub上面,点击目录就可以跳转了,欢迎大家通过fork,改编和优化成自己的JavaScript方法库. 目 ...
- Unity Object Pool完全体
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public ...
- Android 通知 相关api记录
记录帖 通知(Notification) 的API 1.使用getSystemService()方法获取系统服务,参数接收一个字符串来确定获取具体的服务,使用通知传入Content.NOTIFICAT ...
- mysql alter总结
mysql alter总结(转载) 1:删除列 ALTER TABLE [表名字] DROP [列名称] 2:增加列 ALTER TABLE [表名字] ADD [列名称] INT NOT NULL ...