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源码分析理解相关推荐

  1. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  2. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  3. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  4. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  5. Jquery源码分析-整体结构

    最近在学习Jquery的最新的源码,Jquery-3.3.1版本.网上有很多对jquery解析的文章.但是我还是要自己去尝试着看一篇jquery的源码.本系列博客用来记录其中的过程,并同大家分享.本次 ...

  6. jQuery 源码分析第一篇之入口源码

    目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...

  7. jQuery源码分析 整体框架部分及部分常用方法

    最近尝试看看jQuery的源码. 版本 version = "1.11.1" 相对于看一本jQuery如何使用的书,看jQuery源码对它可以有更深层次的理解.jQuery中大量使 ...

  8. jQuery源码分析系列:.domManip() .buildFragment() .clean()

      .domManip(args,table,callback):是jQuery DOM操作的核心函数,可以扩展出如下方法: append/appendTo: prepend/prependTo: b ...

  9. jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/unde

    10.4    .bind() .one() 10.4.1  如何使用 .bind( eventType, [eventData], handler(eventObject) )   在匹配的元素上绑 ...

最新文章

  1. PowerDesigner生成数据库
  2. 从零开始学习jQuery (九) jQuery工具函数
  3. 需求用例分析之三:补充规约
  4. python如何注释掉一段代码_爬取出来的网页代码都被注释掉怎么解决?
  5. Hive 0.12.0安装配置
  6. 【Git】git stash应用场景
  7. mysql取最大一条数据,mysql取出表中,某字段值最大的一条纪录,sql语句
  8. python的全局变量 local variable ‘xxx‘ referenced before assignment
  9. c# 解析Xml文件
  10. Python新手学习基础之循环结构练习
  11. Git以及Git小乌龟的安装使用
  12. 桌面计算机系统乏,桌面管理软件那点事
  13. windows源文件名称大于文件系统支持的长度无法删除问题
  14. HDMI切换器的各种版本能不能互通?
  15. mysql 重做日志 镜像_mysql重做日志 - osc_vr7hvjd2的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. android 手机模拟低内存
  17. 嵌入式linux开发,mqtt库移植
  18. 哦,瞧那,无能的悲观主义者---无能者的独唱
  19. 工具栏QToolBar
  20. 如何计算网络带宽需求?

热门文章

  1. c语言找最大数字,C语言: 键盘输入任意10个整数,找出最大数及最大数的序号。...
  2. oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
  3. 融云直播 SDK 2.0 上线,轻松获得视频直播能力
  4. mysql更改数据库登录密码失败;Access denied for user 'root'@'localhost;mysqladmin: connect to server at 'localhos
  5. Win7下eclipse提交Job到hadoop集群
  6. 【实现】Java实现的文件批量改名
  7. 从0开始搭建自动化测试框架之PO分层架构
  8. LintCode 141. 对x开根 JavaScript算法
  9. Word 在试图打开文件时遇到错误 解决办法
  10. 黑马程序员————第三天