Study jQuery in a Simplified Way

作者:lifesinger 来源:岁月如歌 时间:2010-01-30 12:55:00 

学习复杂代码的最好方法是简化:

(function(win, undefined) {    var jQuery = function(selector, context) {            // jQuery 对象就是 init 函数的一个实例            return new jQuery.fn.init(selector, context);        },        document = window.document,        push = Array.prototype.push,        slice = Array.prototype.slice;    jQuery.fn = jQuery.prototype = {        init: function(selector, context) {            // 选择器            var ret = (context || document).querySelectorAll(selector);            // 转换为普通数组            ret = slice.call(ret);            // jQuery API 的奥妙全在下面这句,将选择器获取的元素添加到 jQuery 对象中            // 使用 push, 速度飞快(当年担心大量 jQuery 对象实例化的性能问题,根本就不是问题)            // 使用 push, 还能自动更新 length 属性            push.apply(this, ret);            return this;        },        length: 0,        // 实例方法        attr: function(name, value) {            return access(this, name, value, jQuery.attr);        }    };    // 这句保证了 init 方法里的 this 拥有 jQuery 实例的方法    jQuery.fn.init.prototype = jQuery.fn;    // 静态方法    jQuery.attr = function(elem, name, value) {        if (value === undefined) {            return elem.getAttribute(name);        }        return elem.setAttribute(name, value);    };    // 神奇的 access, 在实例方法和静态方法中建立了一座桥梁    // 数组批次操作的实现也在这里    function access(elems, key, value, fn) {        var length = elems.length;        if (value !== undefined) {            for (var i = 0; i < length; i++) {                fn(elems[i], key, value);            }            return elems;        }        return length ? fn(elems[0], key) : null;    }    win.$ = win.jQuery = jQuery;})(window);

测试页面:study-jquery-in-simplified-way.html (请在非 IE 浏览器下运行)

源码:jquery~core.js

标签:jquery,学习
0
投稿

猜你喜欢

  • Python reduce()函数的用法小结

    2022-02-27 11:28:45
  • Python实战之疫苗研发情况可视化

    2023-08-19 15:29:35
  • python通过定义一个类实例作为ftp回调方法

    2021-08-16 14:12:03
  • python使用百度或高德地图获取地理位置并转换

    2021-10-26 16:28:55
  • php中Array2xml类实现数组转化成XML实例

    2023-07-14 21:48:13
  • 在PHP3中实现SESSION的功能(二)

    2023-11-17 11:26:52
  • Python连接MySQL并使用fetchall()方法过滤特殊字符

    2024-01-23 07:35:36
  • Django集成CAS单点登录的方法示例

    2023-02-20 14:51:09
  • 深入学习Python+Opencv常用四种图像处理操作

    2023-02-22 12:28:27
  • SqlServer 2005 简单的全文检索

    2024-01-18 05:00:31
  • Access数据库的存储上限

    2024-01-17 19:40:18
  • Python多线程中线程数量如何控制

    2021-01-12 04:05:05
  • Python自动扫雷实现方法

    2023-11-19 19:04:55
  • Oracle In和exists not in和not exists的比较分析

    2009-08-27 10:07:00
  • python爬虫请求头的使用

    2023-03-21 07:10:23
  • html网页颜色表大全(苏昱)

    2008-01-01 15:52:00
  • python XlsxWriter模块创建aexcel表格的实例讲解

    2023-08-30 02:20:47
  • PHP使用CURL实现多线程抓取网页

    2024-06-05 09:48:25
  • python遍历文件夹下所有excel文件

    2023-10-26 17:57:12
  • Python自定义scrapy中间模块避免重复采集的方法

    2022-02-19 13:32:44
  • asp之家 网络编程 m.aspxhome.com