jquery框架概览(二)
(function(window, undefined) {
})(window)
window对象作为参数传进闭包的好处
- JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员
- 在函数中定义一个变量时,这个变量只对当前函数可见,javascript会搜索当前函数的作用域,如果没有找到,则继续向上层搜索,而查询是要消耗性能的.
- 在对jQuery代码进行压缩时,window就能在jQuery内部用任意的简写字母代替
undefined为什么作为参数传进去
- undefined可以在js中被修改,这样jQuery内容使用的undefined就被修改了
代码的38~41行
var _jQuery = window.jQuery,
_$ = window.$;
在js中如果也定义了$和jQuery, jQuery和$就保存了这两个变量,避免了冲突
代码的61~63行定义了jQuery函数(返回的是一个对象)
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},
代码的96行就定义了jQuery.fn,就能知道它其实就是jQuery的原型
jQuery.fn = jQuery.prototype={}
代码的283行含义把jQuery构造函数的原型的init的构造函数的原型对jQuery构造函数的原型有引用关系
jQuery.fn.init.prototype = jQuery.fn;
上面的有些绕口看代码吧
function jQuery(){
return new jQuery.prototype.init();
}
jQuery.prototype.init=function(){};
jQuery.prototype.css=function(){console.log("2")};
jQuery.prototype.init.prototype=jQuery.prototype;
jQuery().css();
下面是代码的示意图
代码的66~82行是一些正则
// Used for matching numbers
core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
- [+-]? 表示匹配一个+号或者一个-号也可能一个都没有
- (?:\d*\.|)
(?:) 表示不捕获 \d*表示0个或者多个数字,.表示一个小数点,|表示或者为空
- \d+ 表示1个或者多个数字
- (?:[eE][+-]?\d+|)
[eE]表示e或者E,[+-]?\d表示有且只有一个符号或者一个都没有,多个数字
- core_pnum
- 其实就是保存着一个字符串"[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)",方便和后续的组合成一个正则
// Used for splitting on whitespace
core_rnotwhite = /\S+/g,
- /\S+/g 表示所有的非空白的字符
// 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 = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
- 匹配的是<p>aaa或者#id
// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
- 匹配独立的标签比如<p></p>
// Matches dashed string for camelizing
rmsPrefix = /^-ms-/,
- 匹配ie浏览器的前缀比如chrome的前缀(-webkit-)
rdashAlpha = /-([\da-z])/gi,
- 匹配一个-号加数字或者字母
jquery框架概览(二)的更多相关文章
- 从零实现一个简易的jQuery框架之二—核心思路详解
如何读源码 jQuery整体框架甚是复杂,也不易读懂.但是若想要在前端的路上走得更远.更好,研究分析前端的框架无疑是进阶路上必经之路.但是庞大的源码往往让我们不知道从何处开始下手.在很长的时间里我也被 ...
- jquery框架概览(一)
参照jQuery 2.0.3版本(http://files.cnblogs.com/files/snoy/jquery-2.0.3.js")来进行的源码分析 从代码的最外层可以看到是一个II ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- JavaScript 框架设计(二)
JavaScript 高级框架设计 (二) 上一篇,JavaScript高级框架设计(一)我们 实现了对tag标签的选择 下来我们实现对id的选择,即id选择器. 我们将上一篇的get命名为getTa ...
- jQuery框架-2.jQuery操作DOM节点与jQuery.ajax方法
一.jQuery操作DOM 内部插入操作: append(content|fn):向每个匹配的元素内部追加内容. prepend(content):向每个匹配的元素内部前置内容. 外部插入操作: af ...
- javaScript之jQuery框架
一.jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨 ...
- 深入理解jQuery框架-框架结构
这是本人结合资料视频总结出来的jQuery大体框架结构,如果大家都熟悉了之后,相信你们也会写出看似高档的js框架: jquery框架的总体结构 (function(w, undefined){ //定 ...
- jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件
jQuery框架学习第一天:开始认识jQueryjQuery框架学习第二天:jQuery中万能的选择器jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQuer ...
- 手写 jQuery 框架
1.测试页面; <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
随机推荐
- JavaScript—原生轮播和无缝滚动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 18 11 11 网络通信大都数使用的方式 socket
---恢复内容开始--- 浏览器 和 聊天工具 一般都用socket socket 在不同的 语言中的使用流程都大同小异 收 发 关闭 import socket def len() ...
- 18 11 07 pygame 继续使用
---恢复内容开始--- 1 给原来的游戏不定时 增加一些敌机 用到了pygame的定时器 定时器就是每隔一段时间 就进行一次相同的操作 2 pyagame 在捕获键盘操作有两种 1 ...
- Java 面向对象的帮助文档制作(6)
set classPath=c:\myclass; 设置path路径
- 练习-HTML表单
<html lang="en"> <head> <h1>大学生爱好调查</h1> <meta charset="ut ...
- Vue2.0权限树组件
项目使用的饿了么的Element-Ui,权限树使用其树形控件: <el-tree :data="data" ></el-tree> 刚开始没有特殊需求,三级 ...
- python 文件练习
# 注册:# 1.账号.密码存到文件# 2.判断输入是否为空# 3.校验用户是否存在# 4.用户名和密码长度在6-12位之间#将文件读取到字典中def get_users(): f = open('1 ...
- Ubuntu--- 安装VMware 报错 Build enviroment error!
今天从 Ubuntu 安装 VMware 下载并安装过程都很顺利,但是在启动过程中报错误,所以总结如下: 报错原因:VMware 第一次启动需要编译一些模块,但是刚开始并没有安装 gcc 所以便报无法 ...
- 由AnnotatedElementUtils延伸的一些所思所想
这篇博客的两个主题: spring的AnnotatedElementUtils 个人源码阅读方法论分享 为什么要分享AnnotatedElementUtils这个类呢,这个类看起来就是一个工具类,听起 ...
- Python筛法求素数
l=[2]m,n=input().split()m=int(m)n=int(n) for i in range(m,n): flag=True for j in l: if i%j==0:#如果当前值 ...