jQuery部分源码帮助理解
(function(window){})(window)
为什么要传window给jquery当参数呢?
1.为了压缩有 引用
2.加速变量的寻找,当找window对象的时候,默认从本级开始寻找,一级级往上到最高层。
window.a==undefined
typeof window.a "undefined" 理论上两种都行,但是在老版本的IE中上种可能不行
传统的js的面向对象构建方式
function A(){}
A.prototype.init=function(){}
A.prototype.css=function(){}
使用:
var a=new A();
a.init();
a.css();
是否很麻烦
jQuery的做法:
function jQuery(){
return new jQuery.prototype.init();
}
jQuery.prototype.init=function(){}
jQuery.prototype.css=function(){}
jQuery.prototype.init.prototype=jQuery.prototype;//很巧妙,prototype首先是对象,也是型构造函数的原型
使用:
jQuery().css(); 直接省略了两步,被初始化了的
constructor属性,当创建一个js对象的时候,该对象自动有个 constructor属性,该属性就是构造方法
function A(){}
A.prototype.constructor=A;
当var a=new A()的时候,上面这句话自动会赋予的
可以 alert(a.constructor);试试
为什么在 jQuery中 jQuery.fn=jQuery.prototype={......,constructior:jQuery,....}
这一句呢,不是说会自动添加上的么?
首先
function A(){}
A.prototype.name='ww'
A.prototype.age='11'
var a=new A();
alert(a.constructor);//打印出function A(){}
然后 function A(){}
A.prototype={name:'ww',age:'11'}
var a=new A();
alert(a.constructor)//打印出 function Object(){[native object]}
这是因为 第一种 是附加属性 不会影响 构造对象constructor
第二种是 = ,赋予属性而 json格式的 是一个大对象,所以 constructor对象被赋予 object了
写了那句话之后是为了修正,修正为函数形式的。
$("li") 转成的格式为
this:{0:li,1:li,2:li,length}
$.parseHTML()用于实现以上功能转成以上string
$.merge() 合并数组,也可以合并json(但是这个json是key是0,1等的。。。)。 把数组转换成 json
var str="<li>1</li><li>2</li><li>3</li><script>alert(4)<\/script>"
$.parseHTML(str,document,true);//返回数组,每个对象都是一个标签对象['li','li','li','script']
var arr={
0:'a',
1:'b'
length:2}
vr arr2={'c','d'}
$.merge(arr,arr1) ->{0:'a',1:'b',2:'c',3:'d',length:4}形式的json格式了。
$.makeArray() 生成数组
var div=$("div")
$.makeArray(div)生成 div的数组
$.makeArray()
深拷贝与浅拷贝
var a={}
var b={name:{age:30}}
a.name.age=20
$.extend(a,b)
alert(b.name.age) 打印出20 浅拷贝
$.extend(true,a,b)
a.name.age=20;
allert(b.name.age) 打印出30深拷贝,不同对象
jQuery部分源码帮助理解的更多相关文章
- 深入分析,理解jQuery.Deferred源码
前言: 如果你对jQuery.Callback回调对象不了解,或者只掌握其方法,但是没有通过阅读源码理解,可以先阅读 前一章jQuery.Callbacks源码解读二,因为只有完全理解jQuery.C ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- jQuery.Callbacks 源码解读二
一.参数标记 /* * once: 确保回调列表仅只fire一次 * unique: 在执行add操作中,确保回调列表中不存在重复的回调 * stopOnFalse: 当执行回调返回值为false,则 ...
- 【深入浅出jQuery】源码浅析2--使用技巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【学】jQuery的源码思路1——后代选择器
jQuery的源码思路1--后代选择器 这里探讨一下jQuery中后代选择器的封装原理,并自己写一下 getEle('#div1 ul li .box');接受的参数就是个后代选择器,类似于这样: # ...
- (转)【深入浅出jQuery】源码浅析2--奇技淫巧
[深入浅出jQuery]源码浅析2--奇技淫巧 http://www.cnblogs.com/coco1s/p/5303041.html
- storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解
本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...
- jQuery.attributes源码分析(attr/prop/val/class)
回顾 有了之前的几篇对于jQuery.attributes相关的研究,是时候分析jQuery.attr的源码了 Javascript中的attribute和property分析 attribute和p ...
随机推荐
- ORACLE 11g 用Duplicate恢复Data Guard 备库详细过程
1.先查找备库控制文件路径 先在备库上找出控制文件的路径,通过和主库一样,不过为了以防万一,还是check为好. SQL> select name from v$controlfile; NA ...
- Android 编程下去除 ListView 上下边界蓝色或黄色阴影
默认的情况下,在 ListView 滑动到顶部或者是底部的时候,会有黄色或者蓝色的阴影出现.在不同的版本上解决的方法是不同的,在 2.3 版本之前可以在 ListView 的属性中通过设置 andro ...
- InnoDB Double write
记得刚开始看InnoDB文档的时候,Double Write一节(其实只有一小段)就让我很困惑.无奈当时内力太浅,纠缠了很久也没弄明白.时隔几个月,重新来整理一下. 涉及到的概念:Buffer Poo ...
- linux服务之asterisk
由于Asterisk过于专业且复杂,所以目前也存在大量衍生自Asterisk但简化过的通信系统,以让用户较容易使用.比如在欧美比较流行的elastix.trixbox.或以简体中文为基础的Freeir ...
- JS-unicode编码转换
JS-unicode编码转换 <script type="text/Javascript"> var toUN = { on: function(str) { var ...
- C#开发BHO程序(引)
一 C#也可以编写BHO程序 因为eve的官方论坛封掉了签名图功能,所以想自己写个BHO插件来“伪造”签名图.研究了几个C++程序,但是始终对响应WebBrowser内的 HTML事件不得其门.这样就 ...
- disruptor - Concurrent Programming Framework 并发编程框架
disruptor发布了Java的2.0版本(.Net版本见这里),disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件 ...
- Mock框架
MoQ(基于.net3.5,c#3.0的mock框架)简单介绍 - 你听海是不是在笑 - 博客园 http://www.cnblogs.com/nuaalfm/archive/2009/11/25/1 ...
- Android 检测网络连接状态
Android连接网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置. 首先,要判断网络状态,需要有相应的权限,下面为权限代码(Androi ...
- ICSharpCode.SharpZipLib.dll,MyZip.dll,Ionic.Zip.dll 使用
MyZip.dll : 有BUG,会把子目录的文件解压到根目录.. ICSharpCode.SharpZipLib.dll: 把ICSharpCode.SharpZipLib.dll复制一份,重命名为 ...