jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}
2.1.bug通过索引查询
这里的#13335是bug的索引,如何查询呢?
第一步,浏览器地址栏输入"https://bugs.jquery.com/"。
第二步,在网页的搜索框里输入索引值,那么就可以查询bug的更改历史(changelogs)了。
2.2 "use strict",不使用严格模式(20行)
代码不规范就会报错。IE的低版本并不支持,火狐可能假死。所以,这一行是一条注释,并不提倡使用。
"use strict";a=10;//报错,Uncaught ReferenceError: a is not defined。必须添加上var。还有很多严格模式的报错,不细说。
2.3.变量rootjQuery
根据注释 // A central reference to the root jQuery(document) 说明他是一个指向document的根对象。搜索一下rootjQuery,866行, rootjQuery = jQuery(document); 接下来需要了解的是为什么要使用变量的形式,变量能将值语义化。 a=a+10; 这里并不知道10是什么东西,可是如果写成 var iSpeed=10; 那么可维护性和可读性会更高。
2.4.变量readyList
根据注释 // The deferred used on DOM ready 说明他是一个DOM加载时使用的延迟对象。
2.5.判断undefined的类型
代码 core_strundefined = typeof undefined 究竟有什么意图呢?这是在解决一个小众的bug。比如要判断a属性有没有被定义为window的属性,可以使用 window.a=="undefined"; 和 typeof window.a=="undefined"; 两种方式。可是第一种方式是有兼容问题的,第二种才是全能的。正如注释所说, // Support: IE9,For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` 老版本的IE(6、7、8、9)在第一种方式上有兼容问题,为什么注释里写的是IE9,因为这里的源码版本是2.0.3,所以就不谈IE6、7、8。所以用typeof替代掉直接的逻辑判断。
2.6.变量location、document和docEle的保存
// Use the correct document accordingly with window argument (sandbox)通过window参数来使用正确的document location = window.location,document = window.document,docElem = document.documentElement,
现实中的沙箱,是一种儿童玩具,类如KFC中一个装满小球的容器,儿童可以在随意玩耍,起到保护儿童的作用。所以可以理解为安全环境。从代码的角度上说好处是把某些要用的属性用变量保存下来,那么压缩的时候就会变成字母。location是网址对象,document是document对象,docEle是html元素。
2.7.变量_jQuery、_$的保存、class2Type对象、core_deletedIds数组的定义
// Map over jQuery in case of overwrite 映射到jQuery以覆盖。 // Map over the $ in case of overwrite 映射到$以覆盖。说到这里,不得不说,jQuery框架提供给外部的方法是$()和jQuery(),而两个变量的作用是防止冲突。具体防冲突的方法在349行-817行的jQuery.extend()工具方法。class2type是$.type要用到的一个对象变量,用来存一些值。
// List of deleted data cache ids, so we can reuse them 说core_deletedIds是用来罗列删除的数据缓存id,所以我们可以重复使用它们。太棒了!
2.8.core_打头的局部变量存储
// Save a reference to some core methods 存储一些core方法的引用。变量的存储,方便使用(字符串更简洁),而且方便压缩。
core_version = "2.0.3",//存储了版本号 core_concat = core_deletedIds.concat,//数组的concat(合并)方法 core_push = core_deletedIds.push,//数组的push方法 core_slice = core_deletedIds.slice,//数组的slice方法 core_indexOf = core_deletedIds.indexOf,core_toString = class2type.toString,//对象的toString方法 core_hasOwn = class2type.hasOwnProperty,core_trim = core_version.trim,//trim是字符串的方法,去掉字符串首尾空格
需要说明的事trim方法。在老版本浏览器trim方法是没有的,所以要通过正则把首尾空格去掉。高级浏览器就有trim方法了,所以可以直接来用。这里的jQuery版本2.0.3是放弃了IE6、7、8的,所以这里可以直接使用trim方法。
有首尾空格的代码:alert("("+" 123456 "+")"); 它的显示效果是有空格的字符串。
使用了trim方法的代码: alert("("+" 123456 ".trim()+")"); ,它的显示效果是去掉首尾空格的。
2.9 jQuery函数
jQuery = function( selector, context ) {// The jQuery object is actually just the init constructor 'enhanced' //jQuery对象实际上,仅仅是初始化构造器的增强版本。return new jQuery.fn.init( selector, context, rootjQuery );},
jQuery函数通过8826行的 window.jQuery=window.$=jQuery; 暴露给外部jQuery的接口。对外提供的接口就是 $() 或者 jQuery() 。可以看到jQuery返回的是一个对象,所以后面可以接方法,包括链式调用,比如 $("#div1").css(); 。我们看见jQuery.fn.init,因为在 jQuery.fn = jQuery.prototype = {96行说的是prototype是fn,所以就是在原型上找init函数。
普通的面向对象写法是通过protoype写init和css方法,为了调用css方法需要先用new方法写构造器,然后使用init方法调用,最后才能调用到css方法。
function Aaa(){}Aaa.prototype.init=function(){//初始化 } Aaa.prototype.css=function(){}var al=new Aaa();al.init();al.css()
jQuery的面向对象写法是非常巧妙的,最终让$().css()能够成功找到css方法。
function jQuery(){return new jQuery.prototype.init();}jQuery.prototype.init=function(){};jQuery.prototype.css=function(){};
jQuery.fn.init.prototype = jQuery.fn;//fn也就是protoype。283行。
jQuery().css(); //调用jQuery()返回的是jQuery.prototype(jQuery原型)的init函数的原型构造器。它呢由于283行的赋值,所以刚刚的值就是jQuery.prototype。 //如上,调用jQuery()。得到的结果是jQuery.prototype。所以css就可以通过jQuery().css()。
2.10 正则有关的变量
关于core_pnum的正则, // Used for matching numbers 用来匹配数字的,比如正数啊、负数啊,有没有小数点,以及科学计数法。到css方法的时候要设置宽和高,要用到数字。
core_rnotwhite = /\S+/g, 这个正则呢, // Used for splitting on whitespace 是当字符串要用空格分割一下。 // A simple way to check for HTML strings // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr是一个简单的方式来检查HTML字符串,前面部分是匹配标签,后面部分是匹配id。它可以用来防XSS注入。rsingleTag是匹配独立的标签。
msPrefix的ms是IE浏览器前缀,它跟其他浏览器前缀有区别。css中的margin-left在html DOM的属性是marginLeft。-webkit-margin-left在HTML DOM的属性是webkitMarginLeft。而-ms-margin-left在html DOM的属性是MsMarginLeft。rdashAlpha匹配的比如-2d,会修改为2d。
2.11 回调函数fcamelCase和completed
fcamelCase在jQuery.camelCase作为回调函数使用。completed是ready事件的处理器和自身的清除方法。
转载于:https://www.cnblogs.com/chenmeng2062/p/6728289.html
jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}相关推荐
- 无人机飞控 ardupilot-4.0.7 版本源码总体框架
无人机飞控 ardupilot-4.0.7 版本源码总体框架 无人机飞控 ardupilot-4.0.7 版本源码总体框架 基本结构 最外层文件 无人机飞控 ardupilot-4.0.7 版本源码总 ...
- 游戏陪玩语音聊天系统3.0商业升级独立版本源码
首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码 1.增加人气店员轮播 2.优化ui界面丨优化游戏图标展示丨优化分类展示 3.增加动态礼物打赏功能 4.增加礼物墙功能 增 ...
- PHP在线考试系统4.0版本源码电脑+手机端
PHP在线考试系统的功能与优点: 1.强化训练测验,对知识点进行单独联系 : 2.随机组卷练习,系统自动抽取题目进行练习 : 3.手工组卷联系,通过教师平台手工组卷形成考卷进行模拟练习 : 4.支持主 ...
- 代练工作室php源码,PHP开发的代练系统V2.0版本源码 附带搭建和对接支付视频
PHP开发的代练系统V2.0版本源码 附带搭建和对接支付视频 1/ 修改DB数据库MYSQL连接配置文件 /Public_Menglenet/A/Common/Conf/Config.php 内的数据 ...
- MongoDB4.4版本源码部署分片集群
MongoDB4.4版本源码部署分片集群 node1:39.103.204.27 node2:49.232.197.39 node3:43.138.41.190 shard1 PRIMARY shar ...
- vue2.6.11版本源码运行报错问题处理
vue2.6.11版本源码运行报错问题处理 1.源码下载 git clone http://github.com/vuejs/vue.git 2.安装npm依赖包 npm install 3.运行报错 ...
- 定制化ROM采坑之路(1):魔趣8.1版本源码下载和编译过程
前言 记得当年刚接触Android的时候,就看有关老罗的文章倒是让我的安卓内功提升不少,但是由于工作都是停留在应用层的缘故,我几乎对这块并没有深入研究,最近公司的新产品对Framework层的开发有所 ...
- ClickHouse最版本源码编译(X86)
ClickHouse最版本源码编译 官方指导: 本地环境编译 编译过程: 编译后的结果: client和server版本: 编译后的代码占磁盘大小 官方指导: 链接: link. 本地环境编译 准备c ...
- ChatGPT分销版多开4.3.5版本源码 -新增 首页是否弹出公众号关注二维码注册/登录后否弹出公众号ChatGPT分销版4.3.5
ChatGPT分销版多开4.3.5版本源码,ChatGPT分销版源码升级记录 版本号:4.3.5 - 默认 AI分销版系统源码升级 后台系统配置-界面配置: 新增 首页是否弹出公众号关注二维码 注 ...
最新文章
- 写有效率的SQL查询(IV)
- Redis实现分布式锁释放锁
- q7goodies事例_Java 8 Friday Goodies:本地交易范围
- 在webservice中传递Hashtable
- android 仿真翻页动画,Android 两Activity之间动画效果(1)---------翻页效果
- 日本的“电力路由器”概述
- char* 赋值 const char* 释放_C/C++编程笔记:C语言中 const 关键字的作用及解析,值得收藏!...
- 成功将本地文件添加到github仓库
- ARP协议以及攻击欺骗和防御
- java spring 事务提交_Spring 事务提交之后再执行操作
- 关于Redis的常见面试题解析
- BioPython安装与入门
- HDS VSP G系列存储管理平台MPC安装
- Mac新手必备技巧之如何关闭Mac屏幕亮度自动调节功能
- 南邮研究生matlab与仿真课件,南京邮电大学研究生院.doc
- 【c#】DGV中复制粘贴数据最详细代码
- 右键打开方式没有notepad++编辑器
- Linux || 查询类命令
- 网络天才网页中文版_网络天才网页版(在线玩)
- colorpicker(拾色器下载地址)