• 以下分析均采取沙箱模式
  1. (function (window) {
  2. //为了提高性能把需要的变量统一提前声明
  3. var arr = [],
  4. push = arr.push;
  5. //为区别jQuery,此文章以iQuery来定义封装的函数
  6. function iQuery( selector ) {
  7. return new iQuery.fn.init( selector );
  8. }
  9. //为了方便把iQuery的原型定义为fn,并为原型添加两个方法
  10. iQuery.fn = iQuery.prototype = function () {
  11. constructor: iQuery,
  12. each: function ( callback ) {
  13. return iQuery.each( this, callback );
  14. },
  15. map: function ( callback ) {
  16. return iQuery.map( this, callback );
  17. },
  18. }
  19. //把所有的方法都挂载到iQuery上
  20. iQuery.select = function (selector) {
  21. return slice.apply( document.querySelectorAll( selector ) );
  22. };
  23. iQuery.each = function ( arr, callBack ) {
  24. for ( var i = 0; i < arr.length; i++ ) {
  25. if ( arr.length >= 0 ) {
  26. if ( callBack.call( arr[i], i, arr[i] ) == false ) break;
  27. } else {
  28. for ( var k in arr ) {
  29. if ( callBack.call( arr[k], k, arr[k] ) == false ) break;
  30. }
  31. }
  32. }
  33. };
  34. iQuery.map = function ( arr, callback ) {
  35. var rest = [], tmp,
  36. i;
  37. if ( arr.length >= 0 ) {
  38. for ( i = 0; i < arr.length; i++ ) {
  39. tmp = callback( arr[ i ], i );
  40. if ( tmp != null ) {
  41. rest.push( tmp );
  42. }
  43. }
  44. } else {
  45. for ( i in arr ) {
  46. tmp = callback( arr[ i ], i );
  47. if ( tmp != null ) {
  48. rest.push( tmp );
  49. }
  50. }
  51. }
  52. return rest;
  53. };
  54. //init为构造函数,而且jQuery的巧妙之处就是iQuery和init公用一个原型,并且init是iQuery的一个成员
  55. var init = iQuery.fn,init = function ( selector ) {
  56. push.apply( this, iQuery.select( selector ) );
  57. }
  58. init.prototype = iQuery.fn;
  59. })(window)

jQuery核心结构简单分析的更多相关文章

  1. ffplay.c函数结构简单分析(画图)

    最近重温了一下FFplay的源代码.FFplay是FFmpeg项目提供的播放器示例.尽管FFplay只是一个简单的播放器示例,它的源代码的量也是不少的.之前看代码,主要是集中于某一个"点&q ...

  2. ffplay.c函数结构简单分析(绘图)

    近期重温了一下FFplay的源码. FFplay是FFmpeg项目提供的播放器演示样例.虽然FFplay不过一个简单的播放器演示样例,它的源码的量也是不少的. 之前看代码,主要是集中于某一个" ...

  3. jquery原理的简单分析,让你扒开jquery的小外套。

    引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次LZ和各位来讨论一点前端的内容,其实有关jquery,在很久之前,LZ就写过一篇简单的源码分析.只不过当时刚开始写博客 ...

  4. ffmpeg.c函数结构简单分析(画图)

    前一阵子研究转码的时候看了FFmpeg的源代码.由于ffmpeg.c的代码相对比较长,而且其中有相当一部分是AVFilter有关的代码(这一部分一直不太熟),因此之前学习FFmpeg的时候一直也没有好 ...

  5. Ionic4.x 项目结构简单分析

    新建项目 e2e:端对端测试文件 node_modules :项目所需要的依赖包 resources :android/ios 资源(更换图标和启动动画) src:开发工作目录,页面.样式.脚本和图片 ...

  6. FFmpeg源代码简单分析:结构体成员管理系统-AVOption

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  7. FFmpeg源代码简单分析:结构体成员管理系统-AVClass

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  8. FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  9. [转载] FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

随机推荐

  1. 我的vi/vim配置文件

    位于/etc/vim/的vimrc " All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by & ...

  2. SUI Mobile框架开发,android、ios表单遇到的问题

    1.页面添加区域滚动,滚动区域内元素事件无效问题 解决方法: <script type="text/javascript" charset="utf-8" ...

  3. Lua 5.2 Reference Manual

    Lua 5.2 Reference Manual.pdf

  4. mysql支持的数据类型及其测试

    原文:mysql支持的数据类型及其测试 1.基础知识 1.1如何来查看mysql的帮助手册 ?int Help float; 1.2创建表的规则 CREATE TABLE [IF NOT EXISTS ...

  5. jQuery百叶窗图片滑块

    超酷的jQuery百叶窗图片滑块实现教程   今天我们要来分享一款基于jQuery的百叶窗焦点图插件,也可以说是图片滑块插件.这种jQuery焦点图插件的应用非常广泛,在早些年前,我们需要用flash ...

  6. Mock原理学习

    同事搓蛋问了我一个问题,mock的原理是啥,没怎么想出来,于是花了点时间学习了一下. 从Moq这个库入手:https://github.com/moq/moq4 Moq用到了Castle的库用于Dyn ...

  7. 如果gen.lib.rus.ec这个电子书下载站上不去了,那就用这个吧

    如果著名的gen.lib.rus.ec这个电子书下载站上不去了,那就用这个吧: 万千合集站 http://www.hejizhan.com/ 里面除了镜像索引了gen.lib.rus.ec上的所有英文 ...

  8. 利用Readability解决网页正文提取问题

    分享: 利用Readability解决网页正文提取问题   做数据抓取和分析的各位亲们, 有没有遇到下面的难题呢? - 如何从各式各样的网页中提取正文!? 虽然可以用SS为各种网站写脚本做解析, 但是 ...

  9. ImageMagick利用蒙版合成图片

    先看合成后的效果图. 需要的图片素材: 1.一张图片(335x600) 2.一张蒙版图片(335x600) 3.一张相框图片(335x600) 第一步,根据蒙板和图片,截取图片.而且所截取的图片之外的 ...

  10. 实践Scrum

    http://blog.vsharing.com/agiledo/ [原创]敏捷开发实践-我们这样实践Scrum-续(81页) 我们团队实践Scrum,有一些做法和教训,希望和大家分享: 公司背景:通 ...