jQuery学习笔记-1

来源:互联网 发布:土耳其历史 知乎 编辑:程序博客网 时间:2024/05/22 14:15

p.s. 这是我的第一篇文章,是笔记性质的,就是说是边看书边敲的,书名是《jQuery技术内幕》作者高云,写这个文章是为了帮自己更好的理解jQuery,并不是教程性质的,当然可以当教程看,都是自己理解后才敲上去的。

第一章

1.1设计理念
以用为本

1. 兼容ie6.0+、chrome、firefox3.6+、safari5.0+、opera
2. 链式语法、多功能接口
3. 高效的css选择器(可扩展)
4. 便捷的插件扩展机制,丰富的插件
1.2总体架构
</pre><pre name="code" class="html">    //jquery-1.7.1.js    (function( window, undefined ) {//line 16    //构造jQuery对象    var jQuery = function( selector, context ) {return new jQuery.fn.init( selector, context, rootjQuery );//line 27}//line 28    return jQuery;    //line 955    }) ();//line 957    //工具方法 Utilities    //回调函数列表 Callbacks Object    //异步队列 Deferred Object    //浏览器功能测试 Support    //数据缓存 Data//队列 Queue//属性操作 Attributes//事件系统 Events//选择器 Sizzle//DOM遍历 Traversing//DOM操作 Manipulation//样式操作 CSS//异步请求 Ajax//动画 Effects//坐标Offset、尺寸 Dimensionswindow.jQuery = window.$ = jQuery;}) (window);//line 9266
三大模块:入口模块、底层支持模块、功能模块

1. 入口模块
    1. 构造jQuery对象jQuery()
2. 底层支持模块
    1. 工具模块Utilities:提供一些编程辅助方法,用于简化jQuery对象、DOM元素、数组、对象、字符串等操作
    2. 回调函数列表Callbacks Objects:增强对回调函数的管理,支持添加、移除、触发、锁定、禁用回调函数等功能
    3. 异步队列Deferred Objects:解耦异步任务和回调函数,它在回调函数列表的基础上增加了状态,并提供了多个回调函数列表,支持传播任意同步或异步的回调函数的成功或失败状态
    4. 数据缓存Data:为DOM和Javascript对象附加任意类型的数据
    5. 队列Queue:用于管理一组函数,支持出/入队操作,并确保函数按顺序执行(基于数据缓存)
3. 功能模块
    1. 属性操作Attributes:用于对HTML属性和DOM属性进行读取、设置和移除操作
    2. 事件系统Events:提供了统一的事件绑定、响应、手动触发和移除,它并没有将事件直接绑定在DOM元素上,而是基于数据缓存模块来管理事件
    3. 异步请求Ajax:允许从服务器上加载数据,而不用刷新页面,基于异步队列来管理和触发回调函数
    4. 动画Effects:用于向网页中添加动画效果,基于队列来管理和触发回调函数
    5. DOM遍历Traversing:在DOM树中遍历父元素、子元素和兄弟元素
    6. DOM操作Manipulation:插入、移除、复制和替换DOM元素
    7. 样式操作CSS:获取计算样式或设置内联样式
        1. 坐标Offset:读取或设置DOM元素的文档坐标
        2. 尺寸Dimensions:获取DOM元素的高度和宽度


1.3自调用匿名函数

jQuery的所有代码都包裹在了一个立即执行的匿名函数表达式中,称为自调用匿名函数

1. 为什么创建:创建了一个特殊的函数作用域,该作用域中的代码不会和已有的同名函数、方法和变量以及第三方库冲突
2. 为什么要为自调用匿名函数设置参数windows,并传入window对象:通过传入window对象,可以使window对象变为局部变量(即把函数参数作为局部变量使用),这样当在访问jQuery代码模块中访问window对象时,不需将作用域回退到顶层作用域,从而更快的访问window对象;另外可以在压缩代码时进行优化
3. 为什么要为自调用匿名函数设置参数undefined:特殊值undefined是window对象的一个属性,通过把参数undefined作为局部变量使用,但是又不传入任何值,可以缩短查找undefined时的作用域链,并且在压缩代码时可优化;通过这种方式可以确保参数undefined的值是undefined(因为undefined有可能被重写为新的值)
4. 自调用匿名函数最后的分号:在JavaScript中,如果语句分别放置在不同的行中,则分号是可选的,但是对于自调用匿名函数来说,在之前或之后省略分号都可能会引起语法错误
0 0