jquery技术揭秘静态工具函数源码重构
1.调用页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="js/jquery-1.1.0.js"></script>
<script>
// 通过$() 创建jquery对象 new jquery()
// $.extend(); // 实现对象的扩展
var obj1 = {
name:"max",
age:30
};
var obj2 = {
money:3000
}
// 对象扩展
// 2个参数
// 将obj2的属性扩展到obj1中(obj1没有但obj2有,则obj1里添加obj2这个属性)
$.extend(obj1,obj2); // 合并对象的属性 extend 所有对象扩展 // 1个参数
$.extend({ // 只有一个参数对象 给jquery对象本身扩展属性/方法
getName:function() {
console.log(1);
}
}); // 把jquery作为构造函数,向jquery原型对象上扩展,实例对象将会拥有
$.fn.extend({ // jquery构造函数 原型上扩展
setname:function(){
alert(2);
}
}); /******************************************************************/
var obj1 = { // 没有
name:"max",
age:30
}; var obj2 = { // 遍历 for in 不可枚举
money:3000,
height:175,
weight:75
} var obj3 = {
work:function(){
console.log(1);
}
} $.extend(obj1,obj2); // extend 所有对象扩展 复制 $.extend(obj1,obj2,obj3); $.extend({
getName:function(){
alert("max is max");
},
setname:"1"
}); console.log($.setname); // 给jQuery本身扩展 var result = $.extend({},obj1,obj2,obj3); // 自己写一个对象,将其他对象的属性和方法扩展到该对象上
console.log(result);
</script>
</body>
</html>


2.测试页面
test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="js/jquery-1.1.0.js"></script>
<script>
// 第一个参数一定是对象
$.extend({
name:"max" // this的指向
});
console.log($.name); // 给jquery扩展属性
</script>
</body>
</html>
3.重构jquery
jquery-1.1.0.js

// 1.创建自运行函数
(function(root) { // 3.在js中作用域是通过function来创建的
// 4.定义类(构造函数),暴露接口,便于调用(创建实例new)
var jQuery = function(){
// return new jQuery.prototype.init(); // 桥接模式
return new jQuery.fn.init(); // 8.让fn指向jQuery的原型对象
}
// 7.将jQuery当作对象,给对象扩展fn属性,让fn指向jQuery的原型对象
jQuery.fn = jQuery.prototype = { // prototype指向原型对象
init:function(){
// 初始化方法
},
// css:function(){ // 6.在原型对象中添加css()方法
// //
// } /**
* 10.架构
* 工具函数
* 异步队列
* 浏览器测试
* 数据缓存
* 属性操作
* 事件处理
* 选择器 sizzle
* DOM遍历
* DOM操作
* css操作
* 异步请求 ajax
* 动画
*/ }
// jQuery.prototype.init.prototype = Query.prototype; // 5.桥接模式
jQuery.fn.init.prototype = Query.fn; // 9 jQuery.extend = jQuery.fn.extend = function(){ // 11.指向的命名空间相同
var length = arguments.length; // 12.获取传参的个数
var target = arguments[0]||{}; // 13.第一个参数
var i=1;
var options; // 17.存放参数(>=2)
if(typeof target!=="object"){
// 14.改变参数的引用
target = {};
}
// 15.1个参数
if(length==i){ // 当只有一个参数时,改变this的指向
target=this; // 此处this指向jQuery对象本身
// console.log(target);
i--;
}
// 16.2参数
for(;i<length;i++){ // 从1开始 2<
if(arguments[i]!==null){ // 遍历将要扩展到本身对象的对象
for(name in options){
// console.log(options);
// console.log(options[name]);
// target // 指向第一对象(需要扩展的对象)
target[name] = options[name];
}
}
} return target;// 17.设置返回值
} // 18.jQuery静态工具函数扩展
jQuery.extend({
// 19.jQuery本身调用extend()方法
isArray:function() {
// body...
}
}); // 5.将jQuery挂载在window上,作为window的属性
root.$ = root.jQuery = jQuery;
})(this); // 2.this指向window对象 作用域(命名空间) 局部作用域/全局作用域 变量通过作用链查找(向上遍历)
// 定义在全局作用域中的变量 转换为window的属性
// 定义在全局作用域中的方法 转换为window的function // console.log($==jQuery);
.
jquery技术揭秘静态工具函数源码重构的更多相关文章
- PHP 源码 —— is_array 函数源码分析
is_array 函数源码分析 本文首发于 https://github.com/suhanyujie/learn-computer/blob/master/src/function/array/is ...
- Vue中之nextTick函数源码分析
Vue中之nextTick函数源码分析 1. 什么是Vue.nextTick()?官方文档解释如下:在下次DOM更新循环结束之后执行的延迟回调.在修改数据之后立即使用这个方法,获取更新后的DOM. 2 ...
- PHP 源码 — intval 函数源码分析
PHP 源码 - intval 函数源码分析 文章来源: https://github.com/suhanyujie/learn-computer/ 作者:suhanyujie 基于PHP 7.3.3 ...
- jQuery 技术揭秘
1.平时jquery调用页: index.html : <!DOCTYPE html> <html lang="en"> <head> < ...
- 【C++】【源码解读】std::is_same函数源码解读
std::is_same使用很简单 重点在于对源码的解读 参考下面一句静态断言: static_assert(!std::is_same<bool, T>::value, "ve ...
- mongodb操作:利用javaScript封装db.collection.find()后可调用函数源码解读
{ "_mongo" : connection to YOURIP:27017{ SSL: { sslSupport: false, sslPEMKeyFile: "&q ...
- lodash框架中的chunk与drop函数源码逐行分析
lodash是一个工具库,跟underscore差不多 chunk函数的作用: 把一维数组,按照固定的长度分段成二维数组 如: chunk( [ 10, 20, 30, 40 ], 2 ) 结 ...
- python 内置函数源码查看
如果是用python 实现的模块可以直接在IDE里面追踪到源码 也可以使用help内置函数,例如: help(os) 如果是c 语言实现的模块,则不能直接在IDE里面查看,如果直接在IDE里面查看,会 ...
- Go语言fmt库的print函数源码解析
// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a B ...
随机推荐
- 关于JSON的简介及取值以及常见面试题
关于JSON的简介及取值 JSON(JavaScript Object Notation)一种轻量级的数据交互格式 类似于一种数据封装,可以想象为java中student封装类 JSON的数值可以是数 ...
- 基于CSOCKET的Client简单实例(转)
原文转自 http://blog.csdn.net/badagougou/article/details/78410382 第一步:创建一个基类为CSOCKET类的新类,Cclient,并在主对话框类 ...
- Centos查看文件夹大小
查看当前目录下文件夹大小 du -h --max-depth=1 查看整体情况 df -h
- 腾讯消消乐 (状态压缩DP)
腾讯消消乐 题意 给出长度为 n 的序列,每次可以选择删除序列的一个连续区间,要求这一段区间内所有数最大公约数不小于 k ,删除后剩下的序列仍然构成连续序列. 定义 f(i) 为进行 i 次操作将整个 ...
- POJ1741 Tree(树的点分治)
题目给一棵边带权的树,统计路径长度<=k的点对数. 楼教主男人八题之一,分治算法在树上的应用. 一开始看论文看不懂,以为重心和距离那些是一遍预处理得来的..感觉上不敢想每棵子树都求一遍重心和距离 ...
- POJ 2785 4 Values whose Sum is 0(哈希表)
[题目链接] http://poj.org/problem?id=2785 [题目大意] 给出四个数组,从每个数组中选出一个数,使得四个数相加为0,求方案数 [题解] 将a+b存入哈希表,反查-c-d ...
- POJ 2549:Subsets(哈希表)
[题目链接] http://poj.org/problem?id=2549 [题目大意] 给出一个数集,从中选择四个元素,使得a+b+c=d,最小化d [题解] 我们对a+b建立Hash_table, ...
- 韩国研发AI武器遭抵制,武器自带“头脑”将多可怕
禁止自主武器的开发,事实上并不妨碍人工智能技术的发展,也不妨碍其被正常用于军事领域,其中的关键就在于,人类是否拥有控制权,能否在关键时刻对其进行关闭. 文 |郑伟彬 转自新京报专栏 4月4日,全球超过 ...
- CAP理论下对比ACID模型与BASE模型
CAP介绍 Consistency(一致性), 数据一致更新,所有数据变动都是同步的.比如网购,库存减少的同时资金增多.Availability(可用性), 好的响应性能.比如支付操作10ms内响应用 ...
- 利用osql/ocmd批处理批量执行sql文件
原文:利用osql/ocmd批处理批量执行sql文件 上周在测试环境建了几十张表,保存了.sql文件,准备在正式环境重建的时候懒得一个个打开建了,做一在网上搜寻了一下,果然有简单点的方法. 利用osq ...