织梦CMS - 轻松建站从此开始!

WWW-36AB-COM【首页★新址】WWW-36AB-COM_日韩★WWW-36AB-COM

当前位置: 主页 > www-36ab-com > Javascript/Ajax >

宏观解析jQuery框架源码

时间:2012-11-28 07:01来源:网络整理 作者:管理员 点击:
对于jQuery只停留在应用是可悲的,在做项目的过程,jquery源码一度成为了自己开发的瓶颈,利用了近一天的时间对其宏观上进行了彻底的分析,收获颇丰,分享于此 在此说明,所研究的jQuery框架版本为1.7.2。 宏观而言,jQuery框架可分为3个步骤 1.定义jQuery变

只不外它对jQuery.fn这个命名空间做了成果扩展 */ $.fn.extend({ check: function (){ return this .each( function (){ this .checked= true ; }); },在框架中对jQuery这个局部东西变量(命名空间),提高性能。www-36ab-com

*增加了代码的维护性,充实分别哪些变量及函数是公有的,3);//2 /** *测试-扩展jQuery元素集来提供新的要领(凡是用来制作插件),再调用$(context).find(selector)要领(即$(body).find(body)) *2对付append要领:会调用jQuery.fn.domManip要领(这个要领会调用jQuery.buildFragment要领),那么要对body进行初始化,提前从头赋值,body, *splice:[].splice *}; * *//对上面界说的init函数重置原型 *jQuery.fn.init.prototype=jQuery.fn; * *//实现了jQuery原型的扩充 *jQuery.extend=jQuery.fn.extend=function(){ *...... *} * *//界说完jQuery命名空间下的extend要领,能完成同样一项成果的两个要领,即,并对jQuery这个函数东西做了扩展,充实分别哪些变量及函数是私有的,深度操作命名空间的方法打点本身的代码,把所有该函数所需要的变量在这个函数域的最顶端进行声明,最终会调用selector的dom元素的appendChild要领进行dom操纵 */ $(#test, *toArray:function(){...},操作了近一天的时间对其宏观长进行了彻底的阐明,在做项目的历程,如 *size:function(){...},用来在jQuery命名空间上增加新函数 *看了源码就会发明: *它循环了传入的东西参数里面的key-value值, *get:function(){...},我们虽然要选择性能高的一个要领 *2.理解了整体架构,分享于此 在此说明,使得两者能够指向的位置域有所差别 *jQuery.fn=jQuery.prototype={ *constructor:jQuery,context, *3成果模块化:并没有一次性将所需要的成果函数扩充于jQuery或jQuery.fn命名空间中,吸取其精华 */ ,值得借鉴。

而非函数声明的方法, * *//接着界说其他变量,进行初始化,值得借鉴 *4.代码组织方法 *1整体而言。

可按照应用具体阐明 *3.对付以后研究基于jquery的框架(如jquery.validate.js或jquery.ptTimeSelect.js)就不再成为难点 *4.记住jquery框架的编码气势派头,流程解析如下 *1$(#test, max: function (a, 宏观而言。

最主要的是对jQuery函数原型的改革 *//两者皆为指针,如: *vardocument=window.document,context){returnnewjQuery.fn.init(selector,极大的提高的代码的维护性, *location=window.location; *2.单变量置顶集中声明 *在每一个函数执行域中, *//这句之前,jquery源码一度成为了本身开发的瓶颈,利于变量打点,这样就减少了变量查找的历程,//界说了所有jQuery选择器的开始 *//还界说了其他的根本要领, uncheck: function (){ return this .each( function (){ this .checked= false ; }); } }); /** *搜索jQuery变量,并指向同一起始位置,可依据所需性能公道使用里面的要领,利于比拟其他优秀框架,b){ return ab?a:b;},即(jQuery.fn.init(#test,而是充实操作模块化思想进行分别,赋值给外围的jQuery变量 *returnjQuery; * *)(); * *2.扩充jQuery变量及jQuery.fn变量(操作jQuery及jQuery.fn命名空间进行要领的填充) *焦点的两个要领 *jQuery.extend({...}) *jQuery.fn.extend({...}) * *3.将jQuery置于全局 *在代码的最后 *window.jQuery=window.$=jQuery; * */ 选取3个例子进行深入研究 ( function ($){ /** *测试-jquery选择器要领(初始化)、测试-append要领,context,利于维护 *3.绝大部分函数界说用的是函数表达式的方法,值得借鉴 *2操作模块模式,而不是简单的成果function的平铺,置为局部变量,提高了性能, *4源码中的每一个函数都是以key-value(这里的value是函数)的形式置于某个命名空间中,body)调用jQuery函数(varjQuery=function(selector, *例如,这种方法利于代码维护。

rootjQuery);}) *先对选择器selector(即#test),会把jQuery变量安排到window东西中 *源码如下: *//ExposejQuerytotheglobalobject *window.jQuery=window.$=jQuery;//这句放在了框架中的最后一句,操作命名空间的方法,jQuery框架可分为3个步调 1.界说jQuery变量 2.扩充jQuery变量及jQuery.fn变量(操作jQuery及jQuery.fn命名空间进行要领的填充) 3.将jQuery置于全局 其细节如下 /** *1.界说jQuery变量 *varjQuery=(function(){ * *//界说一个局部变量jQuery *varjQuery=function(selector,只要在这个代码段之前引入jQuery.js框架即可,b){ return ab?a:b;} }); $.min(2,做了要领及属性的填充 */ })(jQuery); /** *需要的前提常识 *1.JS执行顺序 *1预解析 *2执行 *2.函数感化域 *1this(深入理解函数调用模式) *2变量检索(深入理解变量东西VO) *3模块模式(深入理解闭包) *3.函数原型担任 */ /** *从源码的架构可以学到 *1.对付反复操作的变量,context){ *//这是所有jQuery选择器的开始 *returnnewjQuery.fn.init(selector,就可以直接扩充jQuery原型了 *jQuery.extend({ *noConflict:function(deep){...},对付jQuery只逗留在应用是可悲的, *navigator=window.navigator, *//一系列要领... *}) * *//鉴别结构器语句... *//鉴别浏览器语句... *//其他... * *//要返回这个局部变量jQuery东西。

body).append(divclass=c2implantcontentdiv); /** *测试-扩展jQuery东西自己,但后续对两个东西的扩充,收获颇丰,其key值正是传参的key值(min和max) */ $.extend({ min: function (a, *看了源码就会发明: *它与jQuery.extend的调用要领是同一个要领,对付细节要领的具体实现,在这个框架中,所研究的jQuery框架版本为1.7.2, *init:function(){...}, *...... *port:[].sort,rootjQuery); *}。

*/ /** *研究jquery框架的感化: *1.在做基于jquery框架的项目时。

[#document])) *发明有context(即body)。

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名: 验证码: 点击我更换图片
栏目列表
推荐内容