我与大象的故事 2014-01-16
逐行分析jQuery源码奥秘-1
我们要把jquery先从整个大局的分析,在从大的模块分析,最后在逐行分析。
()()把匿名函数放到小括号里,,
匿名函数自执行,好处(就是在这个匿名函数里面写的都是局部,防止冲突)。
全部 是局部的那也不行,我们也要在外面找到一些方法 如:$(),
所以要对外提供接口。(8826)
window下挂载$()与JQuery();
(function(){
(21,94)定义了一些变量和函数
比较重要的一个函数 JQuery = function(){};就是我们通过$或者jquery找到这个方法。8826行提供对外的接口就可以找到。
(96,283)给JQ对象添加一些方法和属性。jquery是一个基于面向对象的程序。
$(“#div1”).css();
$(“#div2”).html();
如63行 是一个new 构造函数的过程,所以返回的是 一个jquery对象。。这个对象就可以调用这个方法 。。。
(285,347)extend JQ的继承的方法。
希望后续添加的代码可以通过extend方法挂载到JQ对象上,后续的扩展和插件的扩展。
(349,817)JQuery.extend() 扩展一些工具方法。
$().css();$().html();前面是一个对象,所以是实例方法。。原生的js不能用的。
$.trim (), $.proxy();前面是$,函数来扩展方法,所以是扩展静态方法。就叫做工具方法,可以给juery对象来用也可以给原生的js来用。
关系:静态方法,是最底层的方法,,,实例方法是高级的一些方法,
所以在实例方法里面中有调用静态方法。
(877,2856) Sizzle 复杂选择器的实现。
如$("ul li + p input.class").css();查找非常麻烦。
(2880,3042) callbacks 回调对象,作用,对函数的统一管理(函数比较多的时候,)
Function fn1(){alert(1)}
Function fn2(){alert(2)}
Var cd = $.callbacks();
Cb.add(fn1);cb.add(fn2); cd.fire();统一弹出来1,2
cd.remove(fn2)把函数2统一删掉了。
(3043,3183) deferred 延迟对象 ,作用,对异步的统一管理(ajax,定时器,创建标签)
setIimeout(function(){
alert(1);
},1000);
alert(2);
怎么来先弹出1,再弹出2.就要用到延迟对象。
Var dfd=$.deferred();
setIimeout(function(){
alert(1);
dfd.resolve();
},1000);
dfd.done(function(){
alert(2);
});
(3184,3295)support 功能检测 ,如通过功能来检测不同浏览器版本等。
(3198)看注释就可以看到不同版本的浏览器
(3308,3652) data() 数据缓存。
(避免大数据量的元素挂载,预防内存泄漏)
$(“#div1”).data(“name”,”hello”);
$(“#div1”).data();通过name来找到hello
(3653,3797) queue()入队,dequeue()出对 队列管理,
$(“#div1”).animate({left:100});
$(“#div1”).animate({top:100});
$(“#div1”).animate({width:100});
运动
(3803,4299) attr() prop() val() addClass()等等 对元素属性的操作。
未完待续
(8826) window.jQuery = window.$=jQuery; 提供对外的接口。
})()