jQuery源码分析理解
1: 首先我们先来看一下jquery代码的整体结构
代码从16行开始为真正的jquery源码,我们看到Jquery源码第一个()中是定义了一个匿名function( window, undefined ) {};接着末尾有个(window),就表示执行这个匿名function,并传入参数window。在匿名function( window, undefined ) {}中,定义了一个局部变量jQuery;然后在末尾我们看到Jquery末尾有一句window.jQuery = window.$ = jQuery;这句代码就表示,将此前定义的jQuery导出到window对象。这也是为什么我们可以在代码任何地方直接使用$、jQuery对象,因为在这里已经将$、jQuery对象挂载到window下去了,而window.$、window.jQuery与直接使用$、jQuery是没有区别的。
2:匿名函数自执行
(function ())();这种结构叫做匿名函数自执行,优点是 匿名函数自执行里面的所有东西都是一个局部的。防止和其他的代码冲突。但是这样一来,造成了外部调用不到内部局部变量的情况,所以需要对外提供使用内部局部变量和方法的接口,例子:
(function () {var a = 10;alert(a); })();alert(a);
3:.如何能够访问到匿名函数自执行中的方法呢?
我们可以把函数挂载到window上面,通过调用window来进一步调用方法,在jquery中就是这样实现的。在之前定义了一些函数和变量,在9246行将jQuery挂载到了window上,这样就使得外部可以访问到jQuery内部的变量和方法。
<script>(function () {var a = 10;function find(){alert(a); } window.find = find; })();find()</script>
4:jquery函数扩展
代码97行
jQuery.fn = jQuery.prototype
此处,jQuery.prototype,这表明jQuery是一个基于面向对象的程序,往后就是在给jQuery对象添加一些属性和方法。针对面向对象,举一个扩展函数的例子。
(jQuery.fn.myMethod=function () {alert('myMethod');
})
// 或者:
(function ($) {$.fn.extend({myMethod : function () {alert('myMethod');}})
})(jQuery)
使用:
$("#div").myMethod();
jQuery源码分析理解相关推荐
- [转] jQuery源码分析-如何做jQuery源码分析
jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...
- jQuery源码分析-each函数
本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...
- jQuery源码分析系列
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...
- [转]jQuery源码分析系列
文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...
- Jquery源码分析-整体结构
最近在学习Jquery的最新的源码,Jquery-3.3.1版本.网上有很多对jquery解析的文章.但是我还是要自己去尝试着看一篇jquery的源码.本系列博客用来记录其中的过程,并同大家分享.本次 ...
- jQuery 源码分析第一篇之入口源码
目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...
- jQuery源码分析 整体框架部分及部分常用方法
最近尝试看看jQuery的源码. 版本 version = "1.11.1" 相对于看一本jQuery如何使用的书,看jQuery源码对它可以有更深层次的理解.jQuery中大量使 ...
- jQuery源码分析系列:.domManip() .buildFragment() .clean()
.domManip(args,table,callback):是jQuery DOM操作的核心函数,可以扩展出如下方法: append/appendTo: prepend/prependTo: b ...
- jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/unde
10.4 .bind() .one() 10.4.1 如何使用 .bind( eventType, [eventData], handler(eventObject) ) 在匹配的元素上绑 ...
最新文章
- PowerDesigner生成数据库
- 从零开始学习jQuery (九) jQuery工具函数
- 需求用例分析之三:补充规约
- python如何注释掉一段代码_爬取出来的网页代码都被注释掉怎么解决?
- Hive 0.12.0安装配置
- 【Git】git stash应用场景
- mysql取最大一条数据,mysql取出表中,某字段值最大的一条纪录,sql语句
- python的全局变量 local variable ‘xxx‘ referenced before assignment
- c# 解析Xml文件
- Python新手学习基础之循环结构练习
- Git以及Git小乌龟的安装使用
- 桌面计算机系统乏,桌面管理软件那点事
- windows源文件名称大于文件系统支持的长度无法删除问题
- HDMI切换器的各种版本能不能互通?
- mysql 重做日志 镜像_mysql重做日志 - osc_vr7hvjd2的个人空间 - OSCHINA - 中文开源技术交流社区...
- android 手机模拟低内存
- 嵌入式linux开发,mqtt库移植
- 哦,瞧那,无能的悲观主义者---无能者的独唱
- 工具栏QToolBar
- 如何计算网络带宽需求?
热门文章
- c语言找最大数字,C语言: 键盘输入任意10个整数,找出最大数及最大数的序号。...
- oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
- 融云直播 SDK 2.0 上线,轻松获得视频直播能力
- mysql更改数据库登录密码失败;Access denied for user 'root'@'localhost;mysqladmin: connect to server at 'localhos
- Win7下eclipse提交Job到hadoop集群
- 【实现】Java实现的文件批量改名
- 从0开始搭建自动化测试框架之PO分层架构
- LintCode 141. 对x开根 JavaScript算法
- Word 在试图打开文件时遇到错误 解决办法
- 黑马程序员————第三天