jQuery解密之----执行过程分析
来源:互联网 发布:美国好吃的三明治 知乎 编辑:程序博客网 时间:2024/06/12 19:31
javaScript 是一门基于对象的语言,然而它的对象技术的实现与其他的语言有很大的差异。
在javaScript中,定义一个类的一般采用以下这种模式:
//定义一个构造函数testClass(param1,param2){ this.att1=param1; this.att2=param2; ....}
// 在prototype对象上扩展,加上相应的方法;testClass.prototype = { Method1: function() {...}, Method2: function() {...}, ...}
// 定义一个实例;var test = new testClass(); 在jQuery.js中,同样也是这种模式,只不过它要复杂很多,而且它还定义了一个jQuery.extend()的静态方法来扩展类的功能,jQuery.js代码执行过程完整分析如下:// 防止多次载入而进行jQuery对象的判断;if ( typeof window.jQuery == "undefined" ) { window.undefined = window.undefined; // jQuery的构造函数; var jQuery = function( a, c ) { ... }; // jQuery的命名空间$; if ( typeof $ != "undefined" ) jQuery._$ = $; var $ = jQuery; // 给jQuery的prototype增加一些基础方法和属性; // 其中有些方法是调用下面的扩展方法实现的; // 注意下面的jQuery.fn = jQuery.prototype; jQuery.fn = jQuery.prototype = { each: function( fn, args ) { ... }, find: function( t ) { ... }, ... }; // jQuery实现继承的方法; jQuery.extend = jQuery.fn.extend = function( obj, prop ) {...}; // 实现一些基础的函数,有大部分是上面调用; jQuery.extend({ init: function() { ... }, each: function( obj, fn, args ) { ... }, find: function( t, context ) { ... }, ... }); // 浏览器版本的检测; new function() { jQuery.browser = { safari:..., opera:..., msie:..., mozilla:... }; ... }; // jQuery.macros扩展,主要用于jQuery.init(),进行jQuery的初始化; jQuery.macros = { filter: [ ... ], attr: { ... }, each: { ... }, ... }; // jQuery初始化; jQuery.init(); // 实现jQuery的重要方法ready(); jQuery.fn.extend({ ready: function( f ) { ... } ... }; // 上面ready()方法的具体实现; jQuery.extend({ ready: function() { ... }, ... }; // 对浏览器某些事件进行绑定和解绑定; new function() { ... jQuery.event.add( window, "load", jQuery.ready ); }; // 当IE浏览器关闭时,清除上面绑定的事件,防止内存泄漏; if ( jQuery.browser.msie ) jQuery(window).unload( ... ); // 实现一些浏览器效果; jQuery.fn.extend({ show: function( speed, callback ) { ... }, hide: function( speed, callback ) { ... }, ... }; // 上面的一些函数具体实现; jQuery.extend( {...} ); // 以下都是Ajax的实现,这里声明原型,具体实现调用下面的函数; jQuery.fn.extend({ loadIfModified: function(url, params, callback ) { ... }, ... }; // 针对IE浏览器创建不同的XMLHttpRequest对象; if (jQuery.browser.msie && typeof XMLHttpRequest == "undefined") { ... }; // Ajax函数的绑定; new function() { var e = "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess".split(","); ... }; // Ajax函数的具体实现; jQuery.extend({ get: function( url, data, callback, type, ifModified ) { ... }, post: function( url, data, callback, type ) { ... }, ajax: function( type, url, data, ret, ifModified ) { ... }, ... }}
- jQuery解密之----执行过程分析
- jQuery.js执行过程分析
- jQuery源码解读---执行过程分析
- JQuery 执行过程
- Spring Security4.0.3源码分析之FilterChainProxy执行过程分析
- 详细解密FineReport中的报表执行过程
- Shuffle执行过程分析
- 分析MapReduce执行过程
- RMI执行过程分析
- ICloudOperator 执行过程分析
- 分析MapReduce执行过程
- Spring MVC framework深入分析之三(上)--执行过程
- Spring MVC framework深入分析之三(下)--执行过程
- Spring MVC framework深入分析之三(上)--执行过程
- Spring MVC framework深入分析之三(下)--执行过程
- Spring MVC framework深入分析之三(上)--执行过程
- Spring MVC framework深入分析之三(下)--执行过程
- mysql源码分析之SQL执行过程简介
- 正定矩阵
- 数据列表增删
- 条款6:若不想使用编译器自动生成函数,就该明确拒绝
- Java性能优化技巧集锦
- 跨平台大行其道 CocoaChina开发者大会落幕
- jQuery解密之----执行过程分析
- 关于app store distribution出现的'armv7'与最小版本'3.0'不兼容的问题
- 2012关于C++ const 的全面总结
- Linux结构
- USB OTG mass storage
- 推荐一个比较好用的性能不错的开源数据库 Postgresql
- Informatica处理大于15位的Decimal数据
- Hash Functions for Hash Table Lookup
- 静态链表模版